%% AdSimpson, aufgabe 15
%
%Thomas Dettbarn	5610641
%Marina Chanuchowa	5622011
%Bibiana Gluski		5600816
%
%% Eingabe: depth: bisherige Rekursionstiefe
%%          a:     linke Intervallgrenze
%%          b:     rechte Intervallgrenze
%%          Sab:   grobes Simpson-Integral auf diesem Intervall
%%          delta: Erlaubte Toleranz
%% Ausgabe: Das Simpsonintegral auf dem Intervall mit hinreichender 
%%	    Genauigkeit.
 
function Ads=AdSimpson(depth,a,b,Sab,delta);
global n	%% definiere n als globale Variable, damit es inkrementiert
		%% werden kann.
xj=b;		%% lege das x_j fest
xjmin1=a;	%% lege das x_{j-1} fest.
hj=xj-xjmin1;	%% berechne die Differenz zwischen x_{j-1} und x_j
Qj=(1/6)*(hj/2)*(f(xjmin1)+4*f(xjmin1+(hj/4))+2*f(xjmin1+(hj/2))+4*f(xjmin1+((3*hj)/4))+f(xj));
		%% berechne Q
n=n+1;		%% inkrementiere n
erg=fopen('AdSimpson-Anwendung.txt','a+');
fprintf(erg,'%3.0f     %3.0f\t%2.10f\t%2.10f\t  %2.10f\n',n,depth,b,a,hj);
fclose(erg);
%% schreibe in die Ausgabedatei 
%% 1.) die Anzahl der Rekursionsschritte
%% 2.) die Rekursionstiefe
%% 3.) die linke Intervallgrenze
%% 4.) die rechte
%% 5.) den Abstand zwischen den Grenzen

if (abs(Qj-Sab)<=(abs(b-a)*delta))		%% Wenn die Differenz zwischen
        Ads=Sab;				%% S und Q im Toleranzbereich 
						%% lieget, ist das Simpson-
						%% integral in diesem Teilinter-
						%% vall hinreichend genau
						%% berechnet.
else						%% ansonsten
	xjmin1=a;				%% Lege das linke Teilinter-
	xj=(a+b)/2;				%% vall fest	
	hj=xj-xjmin1;
	Sab1=(hj/6)*(f(xjmin1)+4*f(xjmin1+(hj/2))+f(xj));
						%% Berechne das Simpsonintegral
						%% im linken Teilintervall.
	xjmin1=(a+b)/2;				%% Lege das rechte Teilinter-
	xj=b;					%% vall fest
	hj=xj-xjmin1;
	Sab2=(hj/6)*(f(xjmin1)+4*f(xjmin1+(hj/2))+f(xj));
						%% Berechne das Simpsonintegral
						%% im rechten Teilintervall.
	Ads=AdSimpson(depth+1,a,(a+b)/2,Sab1,delta)+AdSimpson(depth+1,(a+b)/2,b,Sab2,delta);
						%% Und rufe die AdSimpsonfunk-
						%% tion fuer beide Teilinter-
						%% valle auf.
end
