Python同情解决了4度方程的不良根源

时间:2015-01-16 16:28:04

标签: python numpy matplotlib scipy solver

我需要用python解决4度方程。为此,我使用sympy模块。

当我运行脚本时, sympy 将等式的4个解决方案作为复数返回(参见输出),而事实上,所有这些都是真实的。

什么让同情回答错误答案?

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]

Plot(有4个过零点):

enter image description here

1 个答案:

答案 0 :(得分:2)

请注意,结果实际上是真实的,达到数值精度。 e-30实际上是一个很小的数字。报告的解决方案也与情节一致,因此无需担心。