Почему sympy дает сложные корни при решении кубических уравнений - PullRequest
3 голосов
/ 12 апреля 2019

Я использую следующий код для решения кубического уравнения.

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 Ответ

3 голосов
/ 12 апреля 2019

Существует четкое разделение уровня кода и уровня интерфейса между решатели для уравнений в комплексной области и вещественной области. За пример решения ?? = 1, когда solved нужно решать в комплексной области, возвращает множество всех решений, то есть {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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...