%% 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