python语言求解一元三次方程实例
时间: 2024-12-02 09:20:44 浏览: 12
Python 中可以使用 `cmath` 模块来处理复数情况下的一元三次方程,但实际上标准库并没有直接提供求解一般一元三次方程 (`ax^3 + bx^2 + cx + d = 0`) 的内置函数。我们可以借助一些数学库如 `numpy` 或第三方库 `scipy.optimize` 来实现。
下面是一个简单的例子,使用 `numpy` 库来求解实系数的一元三次方程:
```python
import numpy as np
def solve_cubic(a, b, c, d):
# 计算判别式 (D) 和辅助常数 (p, q)
D = b**2 - 3*a*c
p = q = d - b**3 / 3 + b*c / 3
# 如果有实根,计算它们
if D > 0:
s = np.roots([a, b, c, d])
real_roots = [root.real for root in s if abs(root.imag) < 1e-6]
elif D == 0 and c == 0: # 齐次立方方程 (ax^3 + dx = 0)
real_roots = [-np.sign(b) * np.cbrt(-d / a)]
else: # 根据卡丹公式求解复数根
phi = np.arccos(-b / (2*np.sqrt(-a*c)))
roots = [complex(np.cos(phi / 3) - np.sin(phi / 3) * np.sqrt(3), np.sin(phi / 3) * (-1)**i) * np.cbrt(-2*a) for i in range(3)]
return real_roots if len(real_roots) > 0 else roots
# 示例
a, b, c, d = 1, -6, 11, -6
roots = solve_cubic(a, b, c, d)
print("一元三次方程的解为:", roots)
阅读全文