Problem1.

Да се напише фунцкия, която реализира 3-етапен метод на Рунге-Кута за решаване на произволна задача на Коши за ОДУ от първи ред, като се използва следната таблица на Butcher:

RK3[f_,n_,t0_,T_,u0_]:=(
h=((T-t0)/n);
solution=Table[{0,0},n+1];
solution[[1]]={t0,u0};

For[i=1,i<Length[solution],i++,
k1=h f[solution[[i,1]],solution[[i,2]]];
k2=h f[solution[[i,1]]+(1/3) h, solution[[i,2]]+(1/3)k1];
k3=h f[solution[[i,1]]+(2/3) h, solution[[i,2]]+(2/3)k2];
solution[[i+1]]={solution[[i,1]]+h,solution[[i,2]]+(1/4)k1+(3/4)k3};
];
solution
)

Problem2.

Да се напише фунцкия, която реализира 4-етапен метод на Рунге-Кута за решаване на произволна задача на Коши за ОДУ от първи ред, като се използва следната таблица на Butcher:

RK4[f_,n_,t0_,T_,u0_]:=(
h=((T-t0)/n);
solution=Table[{0,0},n+1];
solution[[1]]={t0,u0};
For[i=1,i<Length[solution],i++,
k1=h f[solution[[i,1]],solution[[i,2]]];
k2=h f[solution[[i,1]]+0.5 h, solution[[i,2]]+0.5k1];
k3=h f[solution[[i,1]]+0.5 h, solution[[i,2]]+0.5k2];
k4=h f[solution[[i,1]]+h,solution[[i,2]]+k3];
solution[[i+1]]={solution[[i,1]]+h,solution[[i,2]]+(1/6)k1+(1/3)k2+(1/3)k3+(1/6)k4};
];
solution
)

Problem3.

Дадено е логистичното уравнение

	(du/dt)=10u(1-u), 0<t<=1,
	u(0)=0.01.
	
с точно решение
	
	u(t) = (0.01/(0.01 + 0.99(e^(-10t))))

	а) Да се реши уравнението с 3-етапния метод на Рунге-Кута от Зад.1 при n=10,100,1000;
	b) Да се реши уравнението с 4-етапния метод на Рунге-Кута от Зад.2 при n=10,100,1000;
	
Да се изобразаят в една координатна система графиките на точното и приближеното решение във всички случаи.
Да се начетаят графики на абсолютните грешки във всички случаи.

F[t_,u_]:=10u(1-u);

exactSol[t_]:=(0.01/(0.01 + 0.99(E^(-10t))))

solRK310=RK3[f,10,t0,T,u0];
solRK3100=RK3[f,100,t0,T,u0];
solRK31000=RK3[f,1000,t0,T,u0];
p1=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK310]];
p2=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK3100]];
p3=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK31000]];
GraphicsRow[{p1,p2,p3}]

absError[approxSolution_,exactSolution_]:=exactSolution[approxSolution[[All,1]]]-approxSolution[[All,2]]
GraphicsRow[{ListPlot[absError[solRK310,exactSolution]],
ListPlot[absError[solRK3100,exactSolution]],
ListPlot[absError[solRK31000,exactSolution]]}]

p1=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK410]];
p2=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK4100]];
p3=Show[Plot[exactSolution[t],{t,0,1},PlotStyle->Red],
ListPlot[solRK41000]];

GraphicsRow[{ListPlot[absError[solRK410,exactSolution]],
ListPlot[absError[solRK4100,exactSolution]],
ListPlot[absError[solRK41000,exactSolution]]}]