在计算ODE的euler方法上运行代码

时间:2019-01-26 13:16:58

标签: matlab

function yout = eulermethod(myeuler, t0, h, tf, y0)

 tic

    yout = y0 
    y = yout;

    for t = t0 : h : tf
        s = myeuler(t,y);
        y = y + h*s;
        y = y(2)
        yout = [yout; y]
        plot(t,yout)
    toc
    end

end

忽略此错误 位置1的索引无效。数组索引必须是正整数或逻辑值。

eulermethod中的错误(第9行)         s = myeuler(t,y

1 个答案:

答案 0 :(得分:1)

这里的问题是MATLAB认为myeuler是矩阵而不是函数。当您致电eulermethod时,我认为您正在做类似的事情

yout = eulermethod(myeuler, t0, h, tf, y0);

您真正想做的是

yout = eulermethod(@myeuler, t0, h, tf, y0);

@将第一个参数转换为函数句柄(请参见the matlab documentation)。

其余的代码还有其他问题,但我不确定您要解决的方程式是什么,所以我无济于事。当然,您的情节线没有多大意义,因为t是标量。

假设您要求解微分方程dy / dt = 2y,对于y(t = 0)= y0,您的函数应该看起来像

function dydt = myeuler(t,y)
dydt = 2*y;
end      

function yout = eulermethod(myeuler, t0, h, tf, y0)

    yout = y0;
    y = y0;

    for t = (t0+h):h:tf

        s = myeuler(t,y);
        y = y + h*s;
        yout = [yout; y];

        plot(t0:h:t, yout) 
        xlabel('t');
        ylabel('y');

        pause(0.1);

    end

end

然后会被类似

的代码调用
t0 = 0;
h = 0.01;
tf = 1;
y0 = 1.0;

yout = eulermethod(@myeuler, t0, h, tf, y0);