uses NumLibABC; // Решение задачи Коши procedure Orbit(t:real; y,yp:array of real); // для независимого аргумента е возвращаются // значения функции y[] и её первой производной yp[] begin var alpha:=Sqr(ArcTan(1.0)); var r:=y[0]*y[0]+y[1]*y[1]; r:=r*Sqrt(r)/alpha; yp[0]:=y[2]; yp[1]:=y[3]; yp[2]:=-y[0]/r; yp[3]:=-y[1]/r end; begin var e:=0.25; var y:=Arr(1.0-e,0.0,0.0,ArcTan(1)*Sqrt((1.0+e)/(1.0-e))); var (abserr,relerr):=(0.0,0.3e-6); var oL:=new RKF45(Orbit, y, abserr, relerr); var (t,tb,th):=(0.0,12.0,0.5); var t_out:=t; repeat oL.Solve(t,t_out); Writeln(t:5:1,oL.y[0]:15:9,oL.y[1]:15:9); case oL.flag of -3,-2,-1,1,8:begin Writeln('Flag=',oL.flag); Exit end; 2:t_out:=t+th; end until t>=tb end.