为什么函数参数未定义?

emb*_*ert 4 matlab octave

显然这可能是一个平庸的错误,但我无法弄清楚如何正确地做到这一点(我的第一天有八度).我想将二阶ODEd²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
Run Code Online (Sandbox Code Playgroud)

然后我做

t = linspace(0,1,100);
z = lsode(ODE2,[1;1],t);
...
Run Code Online (Sandbox Code Playgroud)

但我明白了

error: 'z' undefined near line 6 column 11
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*nas 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);才能工作.