【问题标题】:Using @ or '' for ode45 in Matlab?在 Matlab 中使用 @ 或 '' 表示 ode45?
【发布时间】:2016-04-10 20:30:04
【问题描述】:

我对何时使用 ode45(@functionname, tspan, initialvalues,...) 或 ode45('functionname', tspan, initial values,...) 感到有些困惑。我已经看到使用这两种方法的示例,但有时一种有效,另一种无效。

例如 [t,y]=ode45(@MM2, tspan, y0,[],k1,k2,k3) 有效,但 [t,y]=ode45('MM2', tspan, y0,[],k1,k2,k3) 无效。

非常感谢。

【问题讨论】:

  • 阅读文档(help ode45doc ode45)是回答此类问题的常用方法。网上还有很多旧代码。多年前不推荐使用字符串指定函数(尽管它仍然有效)。使用函数句柄更健壮,生成更快的代码。
  • 在该用例中字符串失败的唯一上下文是函数(在本例中为 MM2)是本地或嵌套函数,因此 feval 无法找到它。我的建议,如果可以的话,总是使用函数句柄。字符串执行是一项遗留功能。

标签: matlab ode45


【解决方案1】:

据我了解,当您要集成的功能在另一个文本文件中时,您将使用“@”。如果函数在同一个文本文件中,则不需要使用“@”。

例如:让我们计算范德波尔摆的水平坐标。

在文件 1 中:xdot_van_der_pol.m

function dxdt = xdot_van_der_pol(t, x)
global u;
if size(u,1) == 0
    u = 1
end
dx1 = x(2);
dx2 = u*(1 - x(1)^2)*x(2) - x(1);
dxdt = [ dx1 ; dx2 ];

在文件 2 中:integration.m

u = 1;
tf = 20;
xo = [2 ; 0];
[t,x]=ode45(@xdot_van_der_pol, [0 tf], xo);
subplot(221); plot(x(:,1), t(:,1)); hold on;
subplot(224); plot(t(:,1), x(:,2)); hold on;
subplot(223); plot(x(:,1), x(:,2)); hold on;

另一种情况是将所有内容都写在同一个文本文件中,这样您就不必使用“@”来调用函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多