为什么函数参数未定义?

时间:2014-07-29 12:50:47

标签: matlab octave

显然这可能是一个平庸的错误,但我无法弄清楚如何正确地做到这一点(我的第一天有八度)。我想将二阶ODE d²x/dt²+ M / L * dx / dt + 5x = 0 定义为ODE系统。 ODE2.m看起来像这样:

function dz = ODE2(z,t)
  %% d^2x/dt^2 + M/L * dx/dt + 5x = 0
  M = 2;
  L = 10;
  dz = zeros(2,1);
  dz(1) = z(2);       % <--- apparently here's something wrong?!
  dz(2) = -(M/L)*z(2)-5*z(1);
end

然后我做

t = linspace(0,1,100);
z = lsode(ODE2,[1;1],t);
...

但是我得到了

error: 'z' undefined near line 6 column 11

但是,我认为z被定义为ODE2.m第一行中的参数。也许问题是z是一个向量,这在定义时是未知的,但如何正确地做呢?如何定义方程并用lsode解决它?

1 个答案:

答案 0 :(得分:5)

在调用z=lsode(ODE2,[1;1],t);中,ODE2被解释为函数调用,它将评估函数,然后遇到没有输入参数的问题。请注意,如果将语句拆分为fun=ODE2; z=lsode(fun,[1;1],t);

,则会出现相同的错误

假设Octave以Matlab的方式运行保存方式,您需要将引用传递给ODE2作为函数句柄,z=lsode(@ODE2,[1;1],t);将起作用。