Мне нужно решить уравнение четвертой степени с помощью python. Для этого я использую модуль sympy.Решающий симптом Python, возвращающий плохие корни в уравнение четвертой степени
При запуске скрипта sympy возвращает 4 решения уравнения как комплексные числа (см. Вывод), в то время как на самом деле все они являются реальными.
Что делает sympy возвращением неправильного ответа?
import numpy as np
import math
from numpy import linalg as la
import sympy as sy
from matplotlib.pyplot import *
L = np.array([0,1,-20.0])
S = np.array([0,0,-10.0])
a = np.dot(S,S)
b = np.dot(S,L)
c = np.dot(L,L)
k0 = a - 1
k1 = 2*(a-b)
k2 = a + 2*b + c - 4*a*c
k3 = -4*(a*c - b**2)
k4 = 4*c*(a*c - b**2)
y = sy.Symbol('y')
r = sy.solvers.solve(k4*y**4 + k3*y**3 + k2*y**2 + k1*y + k0, y)
print r
y = np.linspace(-1.1, 1.1, 1000)
x = k4*y**4 + k3*y**3 + k2*y**2 + k1*y + k0
figure()
plot(y, x)
grid(True)
show()
Выход:
[-0.994999960838935 + 1.66799419488535e-31*I,
-0.0255580200028216 - 6.34301512012529e-30*I,
0.0243009597954184 + 6.32628752256216e-30*I,
0.998750786632373 - 1.50071821925406e-31*I]
земля (есть 4 нулевых пересечений):
Почему вы решаете уравнение 4-го порядка численно, когда существует известная аналитическая формула? –
Обобщение последнего – Xocoatzin