Python中的卡尔达诺公式

  • 本文关键字:Python python math cubic
  • 更新时间 :
  • 英文 :


我需要有人检查我在Python中使用Cardano公式的尝试。我正试图求解一个三次方程的根,我想知道到目前为止我所做的是正确的(还是错误的(。TYIA

def solve(a,b,c,d):
Q = (3*a*c - (b**2)) / (9*(a**2))
R = (9*a*b*c - 27*(a**2)*d - 2*(b**3)) / (54*(a**3))
D = (Q**3) + (R**2)
S = (R + (D**(1/2)))**(1/3)
T = (R - (D**(1/2)))**(1/3)
x1 = S + T - (b/(3*a))
x2 = -((S + T)/2) - (b/(3*a)) + 0.5j * (3**(1/2)) * (S - T)
x3 = -((S + T)/2) - (b/(3*a)) - 0.5j * (3**(1/2)) * (S - T)
return (x1,x2,x3)

您可以将根替换回等式中,看看是否为零。

def verify(a,b,c,d,x):
return (a*(x**3) + b*(x**2) + c*x + d)

roots = solve(a,b,c,d)
for x in roots:
print(verify(a,b,c,d,x))

您错误地记下了三次方程的解。一般来说,没有方程组是不可能的,所以我可以提供以下解决方案

from cmath import *
solutions = set()

def cbrt(polynomial):
solution = set()
root1 = polynomial ** (1 / 3)
root2 = (polynomial ** (1 / 3)) * (-1 / 2 + (sqrt(3) * 1j) / 2)
root3 = (polynomial ** (1 / 3)) * (-1 / 2 - (sqrt(3) * 1j) / 2)
solution.update({root1, root2, root3})
return solution

print('ax^3+bx^2+cx+d=0')
a, b, c, d = map(complex, input().split())
if a != 0:
p = (3 * a * c - b ** 2) / (3 * a ** 2)
q = (2 * b ** 3 - 9 * a * b * c + 27 * a ** 2 * d) / (27 * a ** 3)
alpha = cbrt(-q / 2 + sqrt((q / 2) ** 2 + (p / 3) ** 3))
beta = cbrt(-q / 2 - sqrt((q / 2) ** 2 + (p / 3) ** 3))
for i in alpha:
for j in beta:
if abs((i * j) + p / 3) <= 0.00001:
x = i + j - b / (3 * a)
solutions.add(x)
elif b != 0:
D = c ** 2 - 4 * b * d
solutions.add((-c - sqrt(D)) / 2 * b)
solutions.add((-c + sqrt(D)) / 2 * b)
elif c != 0:
solutions.add(-d / c)
elif d == 0:
solutions.add("True")
else:
solutions.add("False")
print(solutions)

相关内容

  • 没有找到相关文章

最新更新