【问题标题】:How is the ODE being solved in MATLAB?如何在 MATLAB 中求解 ODE?
【发布时间】:2018-06-10 18:32:23
【问题描述】:

我的教授。在进行 ODE 时编写了两个代码

function xdot= code(t,x);
A=[-.5 0; 1 0];
B=[1 ; 0];
K=[1.5 1];
U=-K*x;
xdot=A*x+B*U; `

第二个是

[t,x]=ode23('code',[0 10],[1 1 ]');
figure(1);
plot(t,x);
grid

我不知道他为什么这样做? 这就是我想要做的。这似乎给出了很多错误。

function xdot= code3(t,x)
A=[-.5 0; 1 0];
B=[1 ; 0];
K=[1.5 1];
tspan=[0 10];
y0=[1 1];
U=-K*x;
[t,x]=ode23(@(t,x),U=-K*x;,tspan,y0);
xdot=A*x+B*U;

figure(1);
plot(t,x);
grid

代码3 错误:文件:code3.m 行:8 列:19 表达式或语句不正确——可能是不平衡的 (、{ 或 [.

这段代码要求的是形成一个开环。 A B 是变量 K 被计算出来,模型是 U 。这两个代码在单独的脚本文件中并且第二个代码运行时,输出是所需的。我试图合并两个脚本文件,但我真的无法得到它。另外,我不知道代码是如何工作的?

【问题讨论】:

  • 我认为这是该行中的匿名函数(x) 之后的逗号)。尝试将其移至另一行,例如 here
  • 你试图在匿名函数之后在 ode23 中声明一个语句。
  • 不确定您要做什么,但这不是有效的 MATLAB 语法。如果您需要帮助,请在此处解释您要执行的操作。是否只是避免将code 函数放在单独的文件中?
  • error 是因为 U=-K*x; 中的分号(过早终止该行),但是该行还有其他语法问题(您不应该有@(t,x) 之后的逗号,并且您的函数不依赖于 t)。 问题尚不清楚,因为正如 Cris 所说,您还没有说明您实际上要做什么。
  • 所要求的是在线性模型中形成一个开环。当两个代码(上面的代码)运行时,输出符合要求。但是当我试图在一个脚本文件中编写代码时,我无法做到。 -谢谢!

标签: matlab matlab-guide ode


【解决方案1】:

如果您运行脚本文件,如果脚本文件的第一行是函数声明,并且通常不带参数,则会调用它。

在您的情况下,您可以通过以相反的顺序排列两个代码段来避免这种情况,首先是主例程,然后是函数声明。在加载脚本中的函数声明时,首先解析。因此将以下内容放在一个文件中应该可以工作(如果有错误消息,请报告)

[t,x]=ode23(@code,[0 10],[1 1 ]');
figure(1);
plot(t,x);
grid

function xdot= code(t,x);
  A=[-.5 0; 1 0];
  B=[1 ; 0];
  K=[1.5 1];
  U=-K*x;
  xdot=A*x+B*U; `
end

【讨论】:

  • 非常感谢。它给了我我的输出!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多