有没有可能用辛方法找到复特征值?

2024-06-16 13:51:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个程序来处理矩阵,但当涉及到特征值时,我看到了这个错误: “举起母狮来( Symphy.Matrix.common.Matrix错误:无法计算矩阵的特征值([[5,-5,-3,2,-7],-2,-5,0,2,1],-2,-7,-5,-2,-6],[7,10,3,9,-2],[4,-10,3,-8,-4])” 我用Wolfram计算了这些,似乎有些特征值是复杂的,也许是这样? 代码如下:

from sympy import *
A = Matrix([[5, -5, -3, 2, -7], [-2, -5, 0, 2, 1], [-2, -7, -5, -2, -6], [7, 10, 3, 9, -2], [4, -10, 3, -8, -4]])
A.eigenvals()

Tags: 代码fromimport程序错误矩阵commonmatrix
2条回答

显然,计算characteristic polynomial(也可以通过矩阵对象的charpoly method得到)然后找到根将起作用:

from sympy import *
A = Matrix([[5, -5, -3, 2, -7], [-2, -5, 0, 2, 1], [-2, -7, -5, -2, -6], [7, 10, 3, 9, -2], [4, -10, 3, -8, -4]])
lam = symbols('\lambda')

char_poly = det(lam * eye(A.rows) - A)
roots_char_poly = solve(char_poly, lam)
display(char_poly)
display(roots(poly(char_poly, domain=CC)))
display([N(r) for r in roots_char_poly])

结果是:

enter image description here

注意:我认为eigenvals()方法必须发生的是,在某些地方有一些逻辑猜测charpoly的域是Z[X],而实际上它是C[X](可能是因为A的所有元素都来自Z)。 最有可能是在_eigenvals_dict_eigenvals_list中。另外error_when_incomplete参数在查找at the code时对我来说有点不寻常,特别是因为默认情况下它是True

SymPy正试图精确地计算特征值,但由于它不能表示5次特征多项式的根,所以不能。IMHO,这种行为应该得到改进(https://github.com/sympy/sympy/issues/20582),但是现在,如果您希望得到浮点特征值,可以先在矩阵上调用evalf

>>> A.evalf().eigenvals()
{13.5753711727684 + 5.41544098000364e-64*I: 1, -3.67030896345605 - 7.25865117906282*I: 1, -8.34743023677284 - 3.67066417108162e-63*I: 1, 2.11267699091657 - 1.67049469057562e-63*I: 1, -3.67030896345605 + 7.25865117906282*I: 1}

相关问题 更多 >