%% Numerické řešení počáteční úlohy
% y'=f(x,y),\ y(x_0)=y_0
%% Eulerovy metody:
% explicitní y_{i+1}=y_i+h\,f(x_i,y_i)=y_i+h\,f_i
% implicitní y_{i+1}=y_i+h\,f(x_{i+1},y_{i+1})=y_i+h\,f_{i+1}
% lichoběžníková metoda y_{i+1}=y_i+\frac{h}{2}[f(x_{i},y_{i})+f(x_{i+1},y_{i+1})]=
% y_i+\frac{h}{2}[f_{i}+f_{i+1}]
%
%% Počáteční úloha y'=-y^2, y(1)=1
%% Přesné řešení:

syms Y(t)
DY=diff(Y);
ys=dsolve(DY==-Y^2,Y(1)==1)
y=matlabFunction(ys)

%
%% Zadání hodnot:

f=@(x,y)-y.^2;
x0=1;y0=1;
xn=5;

%% ExplicitnÍ metoda
% Krok h=1

h=1;
[x1,y1]=EE(f,x0,y0,xn,h);

% Krok h=0.5

h=0.5;
[x2,y2]=EE(f,x0,y0,xn,h);

% Krok h=0,1

h=0.1;
[x3,y3]=EE(f,x0,y0,xn,h);

% Krok h=00.5

h=0.05;
[x4,y4]=EE(f,x0,y0,xn,h);

% Grafy:

tt=linspace(1,5,401);
plot(tt,y(tt),'--',x1,y1,x2,y2,x3,y3,x4,y4)
legend('reseni','h=1','h=o,5','h=0.1','h=0.05')

%

function [xx,yy]=EE(f,x0,y0,xn,h)
% function [xx,yy]=EE(f,x0,y0,xn,h)
% Explicit Euler method for equation y'=f(x,y)
%        f - anonymous function
% y(x0)=y0 - initial condition
%       xn - right boundary point of the interval
%        h - step
%    xx,yy - knots and approximation solution

x=x0;
y=y0;
xx=x0;
yy=y0;
while x<xn
    y=y+h*f(x,y);
    x=x+h;
    xx=[xx,x];
    yy=[yy,y];
end

end % end of function EE