为什么求解三次方程式时sympy给出复数根

时间:2019-04-12 08:08:59

标签: python-3.x sympy

我正在使用以下代码来求解三次方程。

from sympy.solvers import solve
from sympy import Symbol
x = Symbol('x')
print(solve(-0.0643820896731566*x**3 + 0.334816369385245*x**2 + 1.08104426781115*x - 2.05750838005246,x))

因为它是一个带实系数的三次方程,所以不能有三个不同的复数根。但是它给出了以下结果。

[-3.19296319480108 - 0.e-22*I, 1.43925417946882 + 0.e-20*I, 6.95416726521169 - 0.e-20*I]

有人可以告诉我是否出了问题。还有其他方法可以求解方程式并给出实根吗?

1 个答案:

答案 0 :(得分:3)

  

代码级和接口级之间有明确的分隔   复数域和实数域中方程的求解器。对于   在复杂域中何时求解的示例求解= 1,   返回所有解的集合,即{2 |∈ℤ},而如果    要在实际域中求解,则仅返回{0}。

https://docs.sympy.org/latest/modules/solvers/solveset.html

您应该使用solve()而不是solveset()

from sympy import var, solveset
x = var('x', real=True)
print(solveset(-0.0643820896731566*x**3 + 0.334816369385245*x**2 + 1.08104426781115*x - 2.05750838005246,x))

{-3.19296319480108, 1.43925417946882, 6.95416726521169}