python计算一元三次方程的代码
时间: 2023-12-20 08:51:26 浏览: 21
以下是求解一元三次方程的 Python 代码:
``` python
import cmath
# 输入一元三次方程的系数 a, b, c, d
a = float(input("请输入 a 的值:"))
b = float(input("请输入 b 的值:"))
c = float(input("请输入 c 的值:"))
d = float(input("请输入 d 的值:"))
# 计算 delta1, delta2, delta3
delta1 = b**2 - 3*a*c
delta2 = 2*b**3 - 9*a*b*c + 27*a**2*d
delta3 = delta2**2 - 4*delta1**3
# 计算解 x1, x2, x3
if delta3 > 0:
C = ((delta2 + cmath.sqrt(delta3))/(2))**(1/3)
x1 = (-b/(3*a)) + (C + delta1/C)/(3*a)
x2 = (-b + complex(-0.5, cmath.sqrt(3)/2)*C + complex(-0.5, -cmath.sqrt(3)/2)*delta1/C)/(3*a)
x3 = (-b + complex(-0.5, -cmath.sqrt(3)/2)*C + complex(-0.5, cmath.sqrt(3)/2)*delta1/C)/(3*a)
elif delta3 == 0:
if delta2 == 0:
x1 = -b/(3*a)
x2 = -b/(3*a)
x3 = -b/(3*a)
else:
K = delta2**(1/3)
x1 = -b/(3*a) + K/(3*a)
x2 = -b/(3*a) - K/(6*a) + complex(0, cmath.sqrt(3)/6*K)/(3*a)
x3 = -b/(3*a) - K/(6*a) - complex(0, cmath.sqrt(3)/6*K)/(3*a)
else:
K = (1/2)*cmath.sqrt(-delta1**3)
U = (-delta2 + complex(0, cmath.sqrt(3))*cmath.sqrt(-delta1**3))/(2*K)
V = (-delta2 - complex(0, cmath.sqrt(3))*cmath.sqrt(-delta1**3))/(2*K)
x1 = (-b/(3*a)) + K*(U + V)/(3*a)
x2 = (-b + complex(-0.5, cmath.sqrt(3)/2)*K*(U - V) + complex(-0.5, -cmath.sqrt(3)/2)*K*(V - U)*cmath.sqrt(-1))/(3*a)
x3 = (-b + complex(-0.5, -cmath.sqrt(3)/2)*K*(U - V) + complex(-0.5, cmath.sqrt(3)/2)*K*(V - U)*cmath.sqrt(-1))/(3*a)
# 输出解 x1, x2, x3
print("x1 =", x1)
print("x2 =", x2)
print("x3 =", x3)
```
此代码使用了复数库 `cmath`,可以计算包含复数解的一元三次方程。