求 ODE45 解法 MATLAB 的特征值

问题描述 投票:0回答:1

我有以下 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() 吗?如果没有,我将如何找到系统的传递函数或雅可比矩阵,以便找到它的特征值?

matlab eigenvalue function-handle ode45 transfer-function
1个回答
0
投票

在不知道方程的确切形式的情况下,根据你的描述,我想你有类似的东西:

[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
© www.soinside.com 2019 - 2024. All rights reserved.