我有以下 ODE45 解决方案:
fun = @(t,X)odefun(X,K,C,M,F(t),resSize);
[t_ode,X_answer] = ode45(fun,tspan,X_0);
输入矩阵为刚度
K(X)
、阻尼 C
、质量 M
和力 F
。 resSize
是系统中的质量总数。
我想使用雅可比矩阵、传递函数或任何其他可行的方法找到系统的特征值。
我尝试过使用:
这很棘手,因为我的
K
矩阵是 X
的函数句柄。换句话说,K=@(X)
。 X
表示系统中每个质量的位移矢量 (x_1(t)
,x_2(t)
,...x_resSize(t)
),其中 resSize
是质量总数。我的 X_answer
矩阵是一个维度为 t_ode
× resSize
的双精度矩阵,其中每一行都是双精度形式的每个质量的位移向量。有什么方法可以将 X_answer
替换为 K 的函数句柄,以便我可以使用 polyeig() 吗?如果没有,我将如何找到系统的传递函数或雅可比矩阵,以便找到它的特征值?
在不知道方程的确切形式的情况下,根据你的描述,我想你有类似的东西:
[M]{x''}+[C]{x'} + [K(x)]{x} = F(t)
由于该方程组是非线性的,因此可以根据从 ode45 函数的输出估计的每个 x 周围的展开来估计特征值。 由于 ode45 对一阶方程组进行积分,您可能引入了变量的更改,将上述系统写为一阶方程组。在状态空间形式中,这是
{y'} = [A]{y} + b(t),其中 {y} = {x ; x'}
因此,ode 函数的输出包含位移 {x} 和速度 {x'}。
如果您想估计输出中每个 x 的特征值,您可以这样做
for ii=1:length(t_ode)
[X,e] = polyeig(K(X_answer(ii,1:end/2),C,M)
end