Python/symphy用矩阵而不是恒等式求特征值

Python/symphy用矩阵而不是恒等式求特征值,python,sympy,linear-algebra,eigenvalue,Python,Sympy,Linear Algebra,Eigenvalue,我在振动(机械动力学)方面有个问题,我有两个辛矩阵M和K。 我的目标是找到w的值,以便det(K-w*M)=0 在Symphy的文档中搜索,我发现Symphy使用函数symphy.charpoly(查找特征多项式)和Symphy.eignavals(查找特征多项式)计算矩阵A的特征值(lamda),从而det(A-lamda*I)=0 我最初的想法是使用代码: 将sympy作为sp导入 #确定变量与填充矩阵K和M w=sp符号(“w”) Mat=K-w*M Mat=sp.expand(Mat)

我在振动(机械动力学)方面有个问题,我有两个辛矩阵
M
K
。 我的目标是找到
w
的值,以便
det(K-w*M)=0

在Symphy的文档中搜索,我发现Symphy使用函数
symphy.charpoly
(查找特征多项式)和
Symphy.eignavals
(查找特征多项式)计算矩阵
A
的特征值(
lamda
),从而
det(A-lamda*I)=0

我最初的想法是使用代码:

将sympy作为sp导入
#确定变量与填充矩阵K和M
w=sp符号(“w”)
Mat=K-w*M
Mat=sp.expand(Mat)
Mat=sp.simplify(Mat)
Det=材料Det()
Det=sp.expand(Det)
Det=sp.simplify(Det)
因此,找到Det的根,就得到了特征值。 但至少对我来说,计算起来非常昂贵而且“丑陋”。 有没有更好的方法来计算特征值


PS:解决问题
det(K-w*M)=0
与解决问题
det(M^{-1}*K-w*I)=0
是一样的,但是计算
M
的倒数可能很昂贵。因此,我认为逆
M
然后计算特征值不是一个好主意。

这可能取决于矩阵的大小和转换的成本,但是如何转换为numpy然后使用?我的测试用例矩阵是4x4,但它可以比20x20大得多。但是我会用你的提示在第一次转换成numpy的数组,然后计算eigvals。非常感谢。不客气!除非我们讨论的是成千上万的值,否则计算转换为numpy和特征值的成本应该可以忽略。这可能取决于矩阵的大小和转换的成本,但是如何转换为numpy然后使用呢?我的测试用例矩阵是4x4,但它可以比20x20大得多。但是我会用你的提示在第一次转换成numpy的数组,然后计算eigvals。非常感谢。不客气!除非我们讨论的是成千上万的值,否则计算转换成numpy和特征值的成本应该可以忽略不计