如何求解ode45 MATLAB写成矩阵形式的ode方程?

How to solve ode equation which is written in matrix form by ode45 MATLAB?

我想解以矩阵形式写成的ode方程。 A=[-0.0178 0 -10;0 -0.2352 10;1 -1 0];B=[0.3313 -8.9335;0 3.7245;0 0]。变量是 x=[x1;x2;x3];。输入是 u=[v;f];xdot=[x1dot;x2dot;x3dot];。最终赋值为-xdot=Ax + Bu,初始条件为x0=[0;0;0];。输入为 v=0.05 和 f=0;

如何通过ode45的anonymus函数求解这个方程。另一个问题是,如果有更大的矩阵,比如 100 阶,那么很难编写单独的形式,那么如果它们是特殊形式,如 xdot=Ax +B,我该如何解决u 其中 xdot 是 n * 1,A 是 n * n,x 是 n * 1,B 是 n * m 和 u 是 m * 1.

默认解算器假定该颂歌是时间相关的(它们通常不是)。另外,我喜欢从非常一般的开始,所以我会在一个单独的文件中创建一个函数(可能 mySystem.m),其中包含五个变量:t、x、u、A 和 B。它看起来像

function dx = mySystem(t, x, u, A, B)
dx = ... (Insert system equations)
end

然后在您定义 A、B 和 u 的脚本中以及您最终想要使用 ode45 之类的东西的地方,我将创建此函数的匿名实例,它具有 ode45 需要的输入,即 t 和 x。它看起来像:

A = ...;
B = ...;
u = ...;
f = @(t, x) mySystem(t, x, u, A, B);

现在,这个 f 可以很容易地使用 ode45:

tspan = [t0, tf];
x0 = ...;
[t, y] = ode45(@f, tspan, x0);

如果您现在需要更改 B 或 A 或 u,您只需在脚本中执行即可,您可以重用 mySystem 解决其他问题。

我知道 mySystem 是一个 one-liner 并且也可以是一个匿名函数,但是其他的 ode 可能不适合放在一行中,需要一个单独的文件。这样编程变得更加一致。由你决定。