我是 MATLAB 的新手用户。我有代码试图找到状态空间模型的时间历史。有四个一阶 ODE,我想同时使用ode45
. 待解方程的实质如下:
x1_dot = x2
x2_dot = -[M] * [K] * x1 - [M] * [C] * x2 + constant*[M] * [P3] * x3 + constant*[M] * [P4] * x4
x3_dot = x2 - constant*x3
x4_dot = x2 - constant*x4
其中[M]
, [K]
, [C]
, [P3]
, 和[P4]
是 3x3 矩阵;x1
, x2
, x3
,x4
都是 3x1 向量;等x1_dot
表示时间导数(它们是 3x1 向量)。我只有初始条件x1
。
我编写的 MATLAB 代码如下。这段代码在我的整个程序中。我没有调用单独的函数,因为我不知道如何通过ode45
函数传递所有矩阵/向量。我收到错误消息:“索引超出矩阵维度。”
tspan = 0:1:20;
initial = [0 0.03491 0];
f = @(t,x) [x(2);
-inv(M_Dbl_Bar_Matrix)*K_Dbl_Bar_Matrix*x(1) - inv(M_Dbl_Bar_Matrix)*C_Dbl_Bar_Matrix*x(2) + (0.5*rho*U^2)*inv(M_Dbl_Bar_Matrix)*P3_Matrix*x(3) + (0.5*rho*U^2)*inv(M_Dbl_Bar_Matrix)*P4_Matrix*x(4);
x(2) - Beta_1*x(3);
x(2) - Beta_2*x(4)];
[t,xp] = ode45(f,tspan,initial);
问题:
如何处理
x(1)
、x(2)
、x(3)
和x(4)
inode45
是 3x1 向量?如何为这个方程组应用初始条件?例如,我是否使用矢量格式,例如:
initial = [0 0.03491 0; 0 0 0; 0 0 0; 0 0 0]
?我是否正确使用/编写了函数(
f
)和ode45
?