Matlab - 矩阵微分方程 [更新矩阵值? ]
Matlab - Matrix Differential Equations [ Update matrix values? ]
美好的一天。我有兴趣解决以下形式的问题:
x_dot = Ax + F,
使用 Matlab。使用数值求解器 (ode23/ode45) 似乎很简单,但在我的例子中,矩阵 A 和向量 F 是状态相关的。因此,我需要在每个迭代步骤后使用新派生的状态更新它们。
真的可以使用 ode23/ode45 来完成吗?我需要走另一条路吗?
提前致谢,任何见解都值得赞赏。
您的问题非常符合ode45
的描述。例如,采用以下无意义的方程式,对系统进行数值求解 t = [0,1], x(0) = (1,1):
A = @(t,x) [ x(2), exp(-t) ; ...
exp(-2*t), x(1) ];
F = @(t,x) [ -0.1*x(2) ; ...
sin(2*pi*t) ];
[t_out, x_out] = ode45(@(t,x) A(t,x)*x + F(t,x), 0:0.01:1, [1;1]);
figure();
plot(t_out,x_out(:,1), '-b');
hold on;
plot(t_out,x_out(:,2), '-r');
美好的一天。我有兴趣解决以下形式的问题:
x_dot = Ax + F,
使用 Matlab。使用数值求解器 (ode23/ode45) 似乎很简单,但在我的例子中,矩阵 A 和向量 F 是状态相关的。因此,我需要在每个迭代步骤后使用新派生的状态更新它们。
真的可以使用 ode23/ode45 来完成吗?我需要走另一条路吗?
提前致谢,任何见解都值得赞赏。
您的问题非常符合ode45
的描述。例如,采用以下无意义的方程式,对系统进行数值求解 t = [0,1], x(0) = (1,1):
A = @(t,x) [ x(2), exp(-t) ; ...
exp(-2*t), x(1) ];
F = @(t,x) [ -0.1*x(2) ; ...
sin(2*pi*t) ];
[t_out, x_out] = ode45(@(t,x) A(t,x)*x + F(t,x), 0:0.01:1, [1;1]);
figure();
plot(t_out,x_out(:,1), '-b');
hold on;
plot(t_out,x_out(:,2), '-r');