scipy 如何用Python求矩阵的特征多项式?

bd1hkmkf  于 2023-05-17  发布在  Python
关注(0)|答案(2)|浏览(256)

假设$A$是一个$n\times n$矩阵。我想计算$A$的特征多项式,即我想计算$$det(XI-A)$$。
python中有没有函数可以计算这个值?

3yhwsihp

3yhwsihp1#

听起来你对一个象征性的解决方案感兴趣?特征多项式在数值上没有多大意义,你可能对特征值更感兴趣。要在SymPy中获得符号矩阵M的特征多项式,您需要使用M.charpoly方法。
有关更多信息,请参阅有关矩阵和线性代数的SymPy文档:http://docs.sympy.org/latest/modules/matrices/matrices.html
如果你想找到一个numpy数组的特征值,numpy.linalg.eigvals(或者numpy.linalg.eigvalsh,如果你有一个埃尔米特矩阵)就是你想要的。

6uxekuva

6uxekuva2#

由于Polynomial APInumpy可以很好地处理多项式。由于矩阵M的特征多项式由其根唯一定义,因此完全可以使用Polynomial对象的fromroots类方法来计算它:

import numpy as np

def characteristic_polynomial(M: np.ndarray) -> np.polynomial.polynomial.Polynomial:
    return np.polynomial.Polynomial.fromroots(np.linalg.eigvals(M))

np.array([[0, 1],[-1, 0]])上调用此函数将返回一个系数为[1.+0.j, 0.+0.j, 1.+0.j]Polynomial对象,这是预期的,因为此矩阵的特征多项式是X² + 1。
注意,如果矩阵是埃尔米特(或对称真实的),使用np.linalg.eigvalsh是计算特征值的首选方法。

相关问题