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
答案 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);