显然这可能是一个平庸的错误,但我无法弄清楚如何正确地做到这一点(我第一天使用 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
求解?
最佳答案
在调用 z=lsode(ODE2,[1;1],t);
中,ODE2
被解释为函数调用,它将计算函数和然后遇到没有输入参数的问题。请注意,如果将语句拆分为 fun=ODE2;,您将得到相同的错误。 z=lsode(乐趣,[1;1],t);
假设 Octave 的工作方式与 Matlab 一样,您需要将对 ODE2
的引用作为函数句柄传递,z=lsode(@ODE2,[1;1],t );
将起作用。
关于matlab - 为什么函数参数未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015754/