我在Anaconda / Spyder中使用SymPy,并且eigenvals函数为特定的4x4矩阵提供了错误的特征值。
代码是:
from sympy import *
x = sqrt((sqrt(5)-1)/2)
a = Matrix([[x**2, -x, -x, 1]])
b = Matrix([[-x, -x**2, 1, x]])
c = Matrix([[-x, 1, -x**2, x]])
d = Matrix([[1, x, x, x**2]])
e = zeros(1, 4)
e = e.row_insert(0,a)
e = e.row_insert(1,b)
e = e.row_insert(2,c)
e = e.row_insert(3,d)
e.row_del(4)
e *= x**2
e.eigenvals()
它给出 +/- sqrt(1 +/- 2 * sqrt(9-4 * sqrt(5)))
(对不起,我不能发布图片)
但也可以
lam=symbols('lambda')
cp= det(e- lam*eye(4))
roots(Poly(cp,lam))
给出正确的答案1和-1,两者都具有多重性2。