下面是使用euler方法求解一阶ode的简单matlab代码.ODEFUN是颂歌,TSPAN是初始和最终时间的2元素向量,Y0是y(0),h是步长。对其进行编码,使得如果发生过冲,则将h调整为在指定的结束时间下降。然而,结果并不出乎意料,因为TOUT和YOUT向量的结束值是两次,而不是一次。似乎while循环在第一次破坏时没有检查条件
function [TOUT,YOUT] = euler2(ODEFUN,TSPAN,Y0,h)
t=TSPAN(1);
i=1;
TOUT(1)=t;
YOUT(1)=Y0;
tlim=TSPAN(2);
while t < tlim
i=i+1;
m=ODEFUN(t,Y0);
if (t+h)>TSPAN(2)
h=h-(t+h-TSPAN(2));
end
y=Y0+h*m;
t1=t+h;
TOUT(i)=t1;
YOUT(i)=y;
t=t1;
Y0=y;
end