显然这可能是一个平庸的错误,但我无法弄清楚如何正确地做到这一点(我的第一天有八度)。我想将二阶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
解决它?
答案 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);
将起作用。