matlab while while循环没有检查条件第一次被破坏

时间:2017-09-26 12:08:00

标签: matlab ode

下面是使用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

enter image description here

编辑:当输入更改时,代码按预期工作  enter image description here

0 个答案:

没有答案