假设$A$是一个$n\times n$矩阵。我想计算$A$的特征多项式,即我想计算$$det(XI-A)$$。python中有没有函数可以计算这个值?
3yhwsihp1#
听起来你对一个象征性的解决方案感兴趣?特征多项式在数值上没有多大意义,你可能对特征值更感兴趣。要在SymPy中获得符号矩阵M的特征多项式,您需要使用M.charpoly方法。有关更多信息,请参阅有关矩阵和线性代数的SymPy文档:http://docs.sympy.org/latest/modules/matrices/matrices.html如果你想找到一个numpy数组的特征值,numpy.linalg.eigvals(或者numpy.linalg.eigvalsh,如果你有一个埃尔米特矩阵)就是你想要的。
M
M.charpoly
numpy.linalg.eigvals
numpy.linalg.eigvalsh
6uxekuva2#
由于Polynomial API,numpy可以很好地处理多项式。由于矩阵M的特征多项式由其根唯一定义,因此完全可以使用Polynomial对象的fromroots类方法来计算它:
numpy
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是计算特征值的首选方法。
np.array([[0, 1],[-1, 0]])
[1.+0.j, 0.+0.j, 1.+0.j]
np.linalg.eigvalsh
2条答案
按热度按时间3yhwsihp1#
听起来你对一个象征性的解决方案感兴趣?特征多项式在数值上没有多大意义,你可能对特征值更感兴趣。要在SymPy中获得符号矩阵
M
的特征多项式,您需要使用M.charpoly
方法。有关更多信息,请参阅有关矩阵和线性代数的SymPy文档:http://docs.sympy.org/latest/modules/matrices/matrices.html
如果你想找到一个numpy数组的特征值,
numpy.linalg.eigvals
(或者numpy.linalg.eigvalsh
,如果你有一个埃尔米特矩阵)就是你想要的。6uxekuva2#
由于Polynomial API,
numpy
可以很好地处理多项式。由于矩阵M的特征多项式由其根唯一定义,因此完全可以使用Polynomial
对象的fromroots
类方法来计算它:在
np.array([[0, 1],[-1, 0]])
上调用此函数将返回一个系数为[1.+0.j, 0.+0.j, 1.+0.j]
的Polynomial
对象,这是预期的,因为此矩阵的特征多项式是X² + 1。注意,如果矩阵是埃尔米特(或对称真实的),使用
np.linalg.eigvalsh
是计算特征值的首选方法。