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和特征值的成本应该可以忽略不计