【问题标题】:Function not retrieving one of the parameters函数未检索参数之一
【发布时间】:2017-11-28 15:12:12
【问题描述】:

这可能只是一个很小的错误,但我在调用函数时遇到了错误:

error: 'D' undefined near line 7 column 25

我的功能是:

function dxdt = s(t,u,D,D0,ni,ax,ay,bn,bx,ex,ey,epsilon)
  D = D0*(1+epsilon*sin(2*pi*t));
  n = u(1);
  x = u(2);
  y = u(3); 
  dxdt = [D*ni - D*n - (ax*(n/(bn+n))*x); ...
          -D*x+ex*ax*(n/(bn+n))*x-ay*(x/(bx+x))*y; ...
          -D*y+ey*ay*(x/(bx+x))*y];
end

我将所有内容都放在这里,但我认为只有D = ... 部分很重要。在我的脚本中,我以这种方式调用函数:

[T,U] = ode45(@(t,u) s(t,u,D,D0,ni,ax,ay,bn,bx,ex,ey,epsilon),interval,u0);

【问题讨论】:

  • 您的调用脚本中的D 定义在哪里?
  • 我只在函数中定义它。我也应该在脚本中输入D=D0*(1+epsilon*sin(2*pi*t) 吗?
  • 如果仅在函数中定义,则不应是传递给函数的参数之一。
  • 当您在调用ode45 中创建匿名函数时,您必须已经定义除tu 之外的所有其他变量。
  • 在您的函数中D 是一个输入,但随后您将其评估为D=D0*(1+epsilon*sin(2*pi*t));

标签: matlab function octave


【解决方案1】:

在您对ode45 的调用中,您正在创建这个anonymous function

@(t,u) s(t,u,D,D0,ni,ax,ay,bn,bx,ex,ey,epsilon)

此函数将接受两个参数tu,在调用时应该传递给它。所有其他变量,例如D,都需要在创建匿名函数之前定义。您的错误表明它们不是。

s 的这些附加参数也将be fixed at the value they had when the anonymous function was created,因此即使您在创建匿名函数后更改D,该函数在调用函数D 时仍将使用之前的D 值。

查看一些有关变量范围的文档也可能会有所帮助:

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 2013-06-27
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多