% reseni diferencialni funkce x'=t-x+1 numerickymi metodami
% E. Bakstein 19.2.2015
%% inicializace
x0=1;
dt=0.5;
t=0:dt:5;
%% analyticke reseni
xExact= t+exp(-t);

%% Eulerova metoda
% 1. radu
xEu=nan(size(t));
xEu(1)=x0;
 for n=1:length(t)-1
     xEu(n+1)=xEu(n)+dt*(t(n)-xEu(n)+1);
 end

% 2. radu
xEu2=nan(size(t));
xEu2(1)=x0;
 for n=1:length(t)-1
     xEu2(n+1)=xEu2(n) + dt*(t(n)-xEu2(n)+1) + .5*dt^2*(xEu2(n)-t(n));
 end

 
 
 %% Runge-Kutta
 ode_function= @(t,x,flag) 1-x+t;
 
 [tRK,xRK]=ode45(ode_function,[0 t(end)],1,[]);

 %% vykresleni
 figure
 plot(t,xExact,'k.-')
 hold on
 plot(t,xEu,'b')
 plot(t,xEu2,'r')
 plot(tRK,xRK,'g')
 xlim([0 1])
legend('analyticke r.', 'Eulerova 1. radu','Eulerova 2. radu','Runge-Kutta')
