function Hausaufgabe03_b
  h = [0.5, 0.2, 0.1, 0.01, 0.001, 0.0001];
  
  fprintf('expl. Euler:\n');
  for i=1:6
      yeul = expleuler(1,1+h(i),h(i),exp(-1),@(x,y) -2*x*y);
     
      fprintf('Fehler bei %f: %e\n', h(i), abs(yeul(2)-exp(-(1+h(i))^2))/h(i));
      pause;
  end
  
  fprintf('\nHeun:\n');
  for i=1:6
      yheun = heun(1,1+h(i),h(i),exp(-1),@(x,y) -2*x*y);
         
      fprintf('Fehler bei %f: %e\n', h(i), abs(yheun(2)-exp(-(1+h(i))^2))/h(i));
      pause;
  end
end


function y = expleuler(a,b,h,y0,f)
  x = a:h:b;
  n = length(x);
  y = zeros(n,1);
  y(1) = y0;
  
  for i=1:n-1
      y(i+1) = y(i) + h*f(x(i),y(i));
  end
end

function y = heun(a,b,h,y0,f)
  x = a:h:b;
  n = length(x);
  y = zeros(n,1);
  y(1) = y0;
  
  for i=1:n-1
      k1 = y(i)+h*f(x(i),y(i));
      y(i+1) = y(i) + h/2*(f(x(i),y(i)) + f(x(i+1),k1));
  end
end

% Hausaufgabe03_b
% expl. Euler:
% Fehler bei 0.500000: 2.107984e-01
% Fehler bei 0.200000: 8.100047e-02
% Fehler bei 0.100000: 3.893726e-02
% Fehler bei 0.010000: 3.703013e-03
% Fehler bei 0.001000: 3.681244e-04
% Fehler bei 0.000100: 3.679040e-05
% 
% Heun:
% Fehler bei 0.500000: 1.570810e-01
% Fehler bei 0.200000: 2.200577e-02
% Fehler bei 0.100000: 5.208268e-03
% Fehler bei 0.010000: 4.935690e-05
% Fehler bei 0.001000: 4.908124e-07
% Fehler bei 0.000100: 4.904965e-09
