【发布时间】:2017-05-19 06:59:17
【问题描述】:
我是 MATLAB 的新手。我有代码试图找到状态空间模型的时间历史。我想使用ode45 同时求解四个一阶 ODE。待解方程的实质如下:
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);
问题:
如何处理
ode45中的x(1)、x(2)、x(3)和x(4)作为 3x1 向量?如何为这个方程组应用初始条件?例如,我是否使用矢量格式,例如:
initial = [0 0.03491 0; 0 0 0; 0 0 0; 0 0 0]?我是否正确使用/编写了函数 (
f) 和ode45?
【问题讨论】: