Matlab:将二阶矩阵微分方程化为标准特征值问题

Matlab:将二阶矩阵微分方程化为标准特征值问题,matlab,matrix,Matlab,Matrix,我想用质量矩阵M和刚度矩阵K(.mat file->)得到一个简单机械系统的固有频率: Mx''(t)+Kx(t)=0(x=位置) 这基本上意味着,我必须求解det(K-w^2*M)=0。但是我如何在Matlab中解决它(或者如果有必要,将其简化为标准特征值问题,然后解决它)?这些矩阵绝对可以用Abaqus(FEM软件)求解,但我必须在Matlab中求解 我尝试了以下方法但没有成功:det(K-w^2*M)=0=>det(M^-1*K-w^2*I)=0(I:=单位矩阵) 但要解决这个特征值问题

我想用质量矩阵M和刚度矩阵K(.mat file->)得到一个简单机械系统的固有频率:

Mx''(t)+Kx(t)=0(x=位置)

这基本上意味着,我必须求解det(K-w^2*M)=0。但是我如何在Matlab中解决它(或者如果有必要,将其简化为标准特征值问题,然后解决它)?这些矩阵绝对可以用Abaqus(FEM软件)求解,但我必须在Matlab中求解

我尝试了以下方法但没有成功:det(K-w^2*M)=0=>det(M^-1*K-w^2*I)=0(I:=单位矩阵) 但要解决这个特征值问题

sqrt(eigs(K*M^-1)) 
传递错误的值和警告:

“矩阵对于工作精度来说是奇异的

在matlab.internal.math.mpower.viaMtimes中(第35行)”

其他错误值可通过det(K-w^2*M)=0=>det(I/(w^2)-M*K^-1)=0获得:


任何暗示都会对我有帮助。提前感谢。

正如@Arpi提到的,您实际上想要解决广义特征值问题:

K*x=w^2*M*x

由于矩阵K和M显然是单数的(或只是其中一个),因此不可能使用
eig
,但必须使用
eig

V = eig(K,M);

w = sqrt(V);

您的问题被称为“在大多数情况下,最好不要执行反演,而是按照最初的说明解决广义特征值问题”。幸运的是,Matlab可以处理此类问题。在你的例子中:
eigs(K,M)
。问题似乎是
M
K
都是单数。非常感谢。问题是矩阵与Abaqus求解的完全相同。Abaqus产生了良好的结果(可以通过分析进行验证)。请允许我问第二个问题:在Matlab中,是否也可以通过阻尼和复特征值来实现这一点?是的,Abaqus可以解决这个问题,这很有趣。我非常确信Matlab可以处理复杂的特征值,可能还有阻尼(与速度成比例?)。关于原始问题:刚度矩阵是奇异的,这很奇怪,因为这意味着结构无法承受任何力。你确定这些是正确的矩阵吗?如果是,我建议首先用一个简单的静态问题复制Abaqus结果,其中只涉及刚度矩阵。谢谢。Abaqus可以选择导出方程系统。我用过。我模拟了一个小弹性的无质量弹簧,它与一个高弹性的质量相连,所以基本上是一个质量阻尼器。但是你的暗示给了我一些想法,我明天可以做什么。关于第二个问题:是的,它与速度成正比-非常简单:Mx'(t)+Dx'(t)+Kx(t)=0
M
K
是稀疏矩阵,因此不能使用
eig
。“当A或B稀疏时,EIG不支持广义特征值问题EIG(A,B)。请改用EIG。”@Arpi,我猜K和M的稀疏性很重要,因为它是FEM应用程序。然后,在使用
eigs
之前,必须首先解决矩阵的奇异性(绝对是K)。怀疑边界条件存在一些问题。
V = eig(K,M);

w = sqrt(V);