% Num. Math. - FS 2013 - Serie 5 Aufgabe 3 - Adams/Bashforth + rk3

function [xfinal]=AdamsBashforth
format long
f=@(t,x) [2 12; -1 -5]*x;
h=0.1;
tf=1;
steps=tf/h;
x0=..
t0=0;
t=t0:h:tf;
% Berechne die 2 ersten Schritte mit Runge-Kutta
[x_hist]=rk3(f,t0,x0,2,h);
fj_minus2=f(t(1),x_hist(:,1));
fj_minus1=.. 
% 3-Schritt-Adams-Bashforth-Formel
for j=3:steps
    fj=..
    x_hist(:,j+1)=..
    fj_minus2=..
    fj_minus1=..
end
xfinal=x_hist(:,end)
x_exact=.. % from b)
error=xfinal-x_exact
end



function [x_hist]=rk3(f,t0,x0,k,h)
% Berechnet k Schritte mit Schrittweite h
% des Runge-Kutta Verfahrens dritter Ordnung 
% von Serie 11, Aufgabe 1 fuer das Anfangswertproblem
%    x'(t)=f(t,x), x(t0)=x0
%
%  Output: x_hist ist eine n x (k+1)-Matrix,
%          wobei n=length(x0) und die Spalte j+1 
%          die Naeherung zu x(t_j) entspricht.
n=length(x0);
x_hist=zeros(n,k+1);
% x0 soll als Spalte gegeben sein:
if size(x0,2)>size(x0,1)
    x0=x0';
end
% Anfangswerte
x_hist(:,1)=x0;
t=t0;

% Butcher Tableau:
A=..
c=.. 
b=..
s=length(c); % Anzahl Stufen des RK Verfahren
K=zeros(n,s); % Matrix mit K=[k_1,..,k_s] 

% k Schritte
for j=1:k
    x_alt=..    
    % s Stufen
    for i=1:s
        % Hint: das Verfahren ist explizit, k_i haengt also nur von
        % den bereits berechnete Stufen k_1,...,k_{i-1} ab!
        
        K(:,i)=f(..);
    end
    x_hist(:,j+1)=x_alt+..;
    t=t+h;
end
end