%
% Musterloesung, Serie 04, Aufgabe 1
%
clear;
clf;

% Eingabe der Parameter
h = input('Schrittweite h = ');
lambda = input('lambda = ');

% Initialisierung im Startpunkt
x(1) = 0;
fwe(1) = 1;
bwe(1) = 1;
trapez(1) = 1;
loes(1) = (1+2/lambda^3)*exp(lambda*x(1)) -(lambda^2*x(1)^2 +2*lambda*x(1) +2)/lambda^3;
       
% Iteration
curr = x(1);
i = 1;
while curr <1.0+1e-8
   i = i + 1; 
   x(i) = x(i-1) + h; 
   fwe(i) = fwe(i-1) + h*(lambda*fwe(i-1)+x(i-1)^2);
   bwe(i) = (bwe(i-1) + h*x(i)^2)/(1-lambda*h);
   trapez(i) = (trapez(i-1) + h*(lambda*trapez(i-1)+x(i-1)^2+x(i)^2)/2)/(1-lambda*h/2);
   loes(i) = (1+2/lambda^3)*exp(lambda*x(i)) -(lambda^2*x(i)^2 +2*lambda*x(i) +2)/lambda^3;
   s=sprintf('%d %e %e %e %e %e',i,x(i),loes(i),fwe(i),bwe(i),trapez(i));
   disp(s)
   curr = x(i) + h;
end;	

% Ausgabe des relativen Fehlers
s = sprintf('Rel. Fehler (Prozent): expl. Euler %e , impl. Euler %e , Trapez %e', ...
    abs(loes(i)-fwe(i))/loes(i)*100, abs(loes(i)-bwe(i))/loes(i)*100, abs(loes(i)-trapez(i))/loes(i)*100);
disp(s)

% graphische Darstellung der Loesung
plot(x(:),loes(:),'-r',...
     x(:),fwe(:),'-b+',...
     x(:),bwe(:),'-gd',...
     x(:),trapez(:),'-m*');

% das verschoenert die Darstellung nur, die Studenten muessen das
% natuerlich nicht machen
set(get(gca,'children'),'markersize',15);
set(get(gca,'children'),'linewidth',2);
 
l=legend('Loesung', 'Expl. Euler', 'Impl. Euler', 'Trapez',2);

xlabel('x');
ylabel('y');
