简单matlab函数中未定义的变量

简单matlab函数中未定义的变量,matlab,octave,ode45,Matlab,Octave,Ode45,我无法理解为什么我会收到以下错误: error: 'y' undefined near line 7 column 22 error: execution exception in odefun.m 对于此功能: function s = odefun(t, y) global K = [ 0.5; 3; 1; 4; 1; 5 ]; function ret = k(n) global K; ret

我无法理解为什么我会收到以下错误:

error: 'y' undefined near line 7 column 22
error: execution exception in odefun.m
对于此功能:

function s = odefun(t, y)
        global K = [ 0.5; 3; 1; 4; 1; 5 ];
        function ret = k(n)
                global K;
                ret = K(n+1);
        end
        s = zeros(6,1);
        s(1) = k(0) -k(1) * y(1) * y(2);
        s(2) = k(2) - k(1) * y(1) * y(2);
        s(3) = k(1) * y(1) * y(2) - k(3) * y(3);
        s(4) = k(1) * y(1) * y(2) - k(2) * y(4);
        s(5) = k(3) * y(3) - k(4) * y(5);
        s(6) = k(3) * y(3) - k(5) * y(6);
end

y0 = [1; 1; 1/2; 0; 0; 0]
[t, y] = ode45(odefun, [0 10], y0)
很明显,我是一名Matlab初学者,非常感谢您的帮助。

当您这样做时

[t, y] = ode45(odefun, [0 10], y0)
您正在调用没有参数的
odefun
。您需要传递函数句柄:

[t, y] = ode45(@odefun, [0 10], y0)
当你这样做的时候

[t, y] = ode45(odefun, [0 10], y0)
您正在调用没有参数的
odefun
。您需要传递函数句柄:

[t, y] = ode45(@odefun, [0 10], y0)

Octave说嵌套函数的句柄还不受支持。。。你知道这个问题是否已经解决了吗?谢谢你的回答。@jaslibra尝试在文件末尾,在main函数之后定义你的函数。嵌套函数是在另一个函数体内定义的函数。但是您也可以在主函数之后定义私有函数。它们是不同的,因为它们不能访问主函数的范围。我希望你能在Octave中使用句柄。Octave说嵌套函数的句柄还不受支持。。。你知道这个问题是否已经解决了吗?谢谢你的回答。@jaslibra尝试在文件末尾,在main函数之后定义你的函数。嵌套函数是在另一个函数体内定义的函数。但是您也可以在主函数之后定义私有函数。它们是不同的,因为它们不能访问主函数的范围。我希望你能掌握八度音阶的音阶。