如何用ode45MATLAB求解矩阵形式的ode方程



我想求解以矩阵形式写成的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];。最后,ode变为-xdot=Ax+Bu,初始条件为x0=[0;0;0];。输入为v=0.05和f=0;

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

默认解算器假设ode是时间相关的(通常不是(。此外,我喜欢从非常通用的开始,所以我会在一个单独的文件(可能是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是一个单行函数,也可以是一个匿名函数,但其他ode可能不适合一行,需要一个单独的文件。通过这种方式,编程变得更加一致。这取决于你。

相关内容

  • 没有找到相关文章

最新更新