Используя формулу из https://engineersfield.com/cubic-equation-formula/:
class CubicEquation():
def __init__(self,a,b,c,d):
'''initialize constants and formula'''
q = (3*c - b**2) / 9
r = -27*d + b*(9*c - 2*b**2)
discriminant = q**3 + r**2
s = r + sqrt(discriminant)
t = r - sqrt(discriminant)
term1 = sqrt(3 * ((-t + s) / 2))
r13 = 2 * sqrt(q)
self.cubic_equation = [\
'-term1 + r13*cos(q**3 / 3)',\
'-term1 + r13*cos(q**3 + (2 * pi)/3)',\
'-term1 + r13*cos(q**3 + (4 * pi)/3)'\
]
def solve(self):
*--snip--*
, а затем вызывая ее с answer = eval(self.cubic_equation[index])
при вызове этой формулы с аргументами (1,1,1,1)
, я получаю решение: -6.803217085397121, -8.226355957420402, -8.208435953185608
и да, я трижды проверил свои формулы с формулами на сайте.
Какой правильный код для этой функции и что не так с моей текущей программой?