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

发布于 2025-01-11 04:27:34 字数 473 浏览 0 评论 0原文

我想求解以矩阵形式编写的常德方程。 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 +Bu 这样的特定形式,我该如何解决,其中 xdot是 n * 1,A 是 n * n,x 是 n * 1,B 是 n * m,u 是 m * 1。

I want to solve ode equation which is written in matrix form. A=[-0.0178 0 -10;0 -0.2352 10;1 -1 0]; and B=[0.3313 -8.9335;0 3.7245;0 0]. Variables are x=[x1;x2;x3];. Input are u=[v;f];. xdot=[x1dot;x2dot;x3dot];. Finally the ode becomes - xdot=Ax + Bu, initial conditions are x0=[0;0;0];. Inputs are v=0.05 and f=0;

How to solve this equation through anonymus function by ode45. Another question is that if there is larger matrix say 100 order, then it is very difficult to write separate form then how can I solve if they are in particular form like xdot=Ax +Bu where xdot is n * 1, A is n * n, x is n * 1, B is n * m and u is m * 1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

闻呓 2025-01-18 04:27:34

默认求解器假设颂歌与时间相关(通常情况下并非如此)。另外,我喜欢从非常笼统的开始,所以我会在一个单独的文件(可能是 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 是一个单行函数,也可以是一个匿名函数,但其​​他颂歌可能不适合一行,并且需要一个单独的文件。这样编程就变得更加一致。这取决于你。

The default solvers assume that the ode is time dependent (which they normally aren't). Also, I like to start off very general so I would create a function in a separate file (maybe mySystem.m) with five variables: t, x, u, A and B. It would look something like

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

then in the script where you define A, B, and u and where you ultimately want to use something like ode45 I would create an anonymous instance of this function which has the inputs that ode45 wants, ie t and x. It would look something like:

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

now, this f can easily be used ode45:

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

If you now need to change B or A or u you just do it in your script, and you can reuse mySystem for other problems.

I do realize mySystem is a one-liner and could be an anonymous function too, but other ode's may not fit on one line and will need a separate file. This way the programming becomes more consistent. It is up to you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文