(*ОБИКНОВЕН ОЙЛЕР=РУНГЕ КУТА С ЕДНА МЕЖДИННА ТОЧКА*)

(*Начална информация*)

a=1.;b=2;n=5;
f[x_,y_]:=(y/x)+1
x0=a;y0=0;
yt[x_]:=x*Log[x]
(* точна графика*)
grt=Plot[yt[x],{x,a,b}];
(*Съставяне на мрежа*)
h=((b-a)/n);
xi=Table[a+i*h,{i,0.,n}];
points={{x0,y0}};
For[i=0;x=x0;y=y0,
i≤n-1,i++, 
Print["i=",i, "  (Subscript[x, i])=",x,  "      (Subscript[y, i])=",y,   "    (Subscript[f, i])=",f[x,y],
  "     (Subscript[y, i])*=" ,yt[x],  "    (Subscript[e, i])=",Abs[y-yt[x]]];
y=y+h*f[x,y];
x=x+h;
AppendTo[points,{x,y}]
]
Print["Локалната грешка на изчисленията е =",h^2]
Print["Глобалната грешка на изчисленията е =",h]  
grpoint=ListPlot[points,PlotStyle->{PointSize[0.03],Red}];
Show[grt,grpoint]

(*РУНГЕ КУТА С ДВЕ МЕЖДИННИ ТОЧКИ - А) ОТ СТР.45*)

a=1.;b=2;n=5;
f[x_,y_]:=(y/x)+1
x0=a;y0=0;
yt[x_]:=x*Log[x]
(* точна графика*)
grt=Plot[yt[x],{x,a,b}];
(*Съставяне на мрежа*)
h=((b-a)/n);
xi=Table[a+i*h,{i,0.,n}];
points={{x0,y0}};
For[i=0;x=x0;y=y0,
i≤n-1,i++, 
k1=h*f[x,y];
k2=h*f[x+h,y+k1];

Print["i=",i, "  (Subscript[x, i])=",x,  "      (Subscript[y, i])=",y,"    (Subscript[k, 1])= ",k1,"    (Subscript[k, 2])=",k2,   "    (Subscript[f, i])=",f[x,y],
  "     (Subscript[y, i])*=" ,yt[x],  "    (Subscript[e, i])=",Abs[y-yt[x]]];
y=y+1/2*(k1+k2);
x=x+h;
AppendTo[points,{x,y}]
]
Print["Локалната грешка на изчисленията е =",h^3]
Print["Глобалната грешка на изчисленията е =",h^2]  
grpoint=ListPlot[points,PlotStyle->{PointSize[0.03],Red}];
Show[grt,grpoint]

(*РУНГЕ КУТА С ДВЕ МЕЖДИННИ ТОЧКИ - Б) = МОДИФИЦИРАН ОЙЛЕР *)

a=1.;b=2;n=5;
f[x_,y_]:=(y/x)+1
x0=a;y0=0;
yt[x_]:=x*Log[x]
(* точна графика*)
grt=Plot[yt[x],{x,a,b}];
(*Съставяне на мрежа*)
h=((b-a)/n);
xi=Table[a+i*h,{i,0.,n}];
points={{x0,y0}};
For[i=0;x=x0;y=y0,
i≤n-1,i++, 
k1=h*f[x,y];
k2=h*f[x+1/2h,y+1/2*h*f[x,y]];

Print["i=",i, "  (Subscript[x, i])=",x,  "      (Subscript[y, i])=",y,"    (Subscript[k, 1])= ",k1,"    (Subscript[k, 2])=",k2,   "    (Subscript[f, i])=",f[x,y],
  "     (Subscript[y, i])*=" ,yt[x],  "    (Subscript[e, i])=",Abs[y-yt[x]]];
y=y+k2;
x=x+h;
AppendTo[points,{x,y}]
]
Print["Локалната грешка на изчисленията е =",h^3]
Print["Глобалната грешка на изчисленията е =",h^2]  
grpoint=ListPlot[points,PlotStyle->{PointSize[0.03],Red}];
Show[grt,grpoint]

(*РУНГЕ КУТА С ДВЕ МЕЖДИННИ ТОЧКИ - B) *)

a=1.;b=2;n=5;
f[x_,y_]:=(y/x)+1
x0=a;y0=0;
yt[x_]:=x*Log[x]
(* точна графика*)
grt=Plot[yt[x],{x,a,b}];
(*Съставяне на мрежа*)
h=((b-a)/n);
xi=Table[a+i*h,{i,0.,n}];
points={{x0,y0}};
For[i=0;x=x0;y=y0,
i≤n-1,i++, 
k1=h*f[x,y];
k2=h*f[x+2/3h,y+2/3*h*f[x,y]];

Print["i=",i, "  (Subscript[x, i])=",x,  "      (Subscript[y, i])=",y,"    (Subscript[k, 1])= ",k1,"    (Subscript[k, 2])=",k2,   "    (Subscript[f, i])=",f[x,y],
  "     (Subscript[y, i])*=" ,yt[x],  "    (Subscript[e, i])=",Abs[y-yt[x]]];
y=y+1/4*k1+3/4*k2;
x=x+h;
AppendTo[points,{x,y}]
]
Print["Локалната грешка на изчисленията е =",h^3]
Print["Глобалната грешка на изчисленията е =",h^2]  
grpoint=ListPlot[points,PlotStyle->{PointSize[0.03],Red}];
Show[grt,grpoint]

(*РУНГЕ КУТА С ЧЕТИРИ МЕЖДИННИ ТОЧКИ *)

a=1.;b=2;n=5;
f[x_,y_]:=(y/x)+1
x0=a;y0=0;
yt[x_]:=x*Log[x]
(* точна графика*)
grt=Plot[yt[x],{x,a,b}];
(*Съставяне на мрежа*)
h=((b-a)/n);
xi=Table[a+i*h,{i,0.,n}];
points={{x0,y0}};
For[i=0;x=x0;y=y0,
i≤n-1,i++, 
k1=h*f[x,y];
k2=h*f[x+1/2h,y+1/2*h*f[x,y]];
k3=h*f[x+1/2h,y+1/2*k2];
k4=h*f[x+h,y+k3];

Print["i=",i, "  (Subscript[x, i])=",x,  "      (Subscript[y, i])=",y,"    (Subscript[k, 1])= ",k1,"    (Subscript[k, 2])=",k2,
"    (Subscript[k, 3])=",k3,"    (Subscript[k, 4])=",k4,
   "    (Subscript[f, i])=",f[x,y],
  "     (Subscript[y, i])*=" ,yt[x],  "    (Subscript[e, i])=",Abs[y-yt[x]]];
y=y+1/6*(k1+2*k2+2*k3+k4);
x=x+h;
AppendTo[points,{x,y}]
]
Print["Локалната грешка на изчисленията е =",h^3]
Print["Глобалната грешка на изчисленията е =",h^2]  
grpoint=ListPlot[points,PlotStyle->{PointSize[0.03],Red}];
Show[grt,grpoint]