Sie sind auf Seite 1von 6

Rheinisch-Westflische Technische Hochschule

Institut fr Geometrie und Praktische Mathematik Mathematisches Praktikum (MaPra) Sommersemester 2012
Prof. Dr. Wolfgang Dahmen Yuanjun Zhang, M.Sc., Dipl.-Math. Jens Berger

Aufgabe 3
Bearbeitungszeit: knapp zwei Wochen (Abgabe bis Montag, den 7. Mai 2012) Testattermin: Donnerstag, der 10. Mai 2012 Mathematischer Hintergrund: eindimensionale adaptive Quadratur, Quadraturformeln Elemente von C++: Rekursion, Einbinden einer Grakbibliothek, Makeles 14 Punkte

Aufgabenstellung
Gegeben seien , R und eine stetige Funktion : [, ] R. Schreiben Sie ein Programm, das das Integral () = () d bis auf einen vorgegebenen Fehler berechnet. Benutzen Sie dazu eine adaptive Unterteilung des Intervalls. Vergleichen Sie den Aufwand mit dem bei einer quidistanten Unterteilung.

Quadraturformeln
Da Integrale nur in den wenigsten Fllen analytisch geschlossen berechenbar sind, bemht man numerische Methoden zur Berechnung von Integralen (Quadratur ). Die eingesetzten Nherungsformeln werden als Quadraturformeln bezeichnet. Dazu legt man fr 1 Sttzstellen mit fest, an denen die Funktion ausgewertet wird. In Abbildung 1 sind die drei einfachen Quadraturformeln Mittelpunktsregel, Trapezregel und Simpson-Regel dargestellt. Alle drei sind sogenannte Newton-Cotes-Formeln, die entstehen, indem man die Funktion an den Sttzstellen durch ein Polynom interpoliert und dieses anschlieend exakt integriert.[2]
y f (x) y f (x) y f (x)

a+b 2

b x

a
(b) Trapezregel

b x

a+b 2

b x

(a) Mittelpunktsregel

(c) Simpson-Regel

Abbildung 1: Einfache Newton-Cotes-Quadraturformeln

Die entstehenden Newton-Cotes-Formeln kann man dann in der allgemeinen Form von Quadraturformeln

() d ( )

=1

( )

schreiben, wobei die R die Gewichte der einzelnen Sttzstellen bezeichnen. Tabelle 1 gibt die Sttzstellen und Gewichte der ersten Newton-Cotes-Quadraturformeln auf dem Intervall [, ] wieder. Quadraturformel Mittelpunktsregel Trapezregel Simpson-Regel Sttzstellen
+ 2

, , + , 2

Gewichte 1 1 1 2, 2 1 4 1 6, 6, 6

Tabelle 1: Newton-Cotes-Quadraturformeln auf dem Intervall [, ]

Exaktheitsgrad und Ordnung Man klassiziert Quadraturformeln danach, bis zu welchem Grad sie Polynome exakt integrieren, d.h. bis zu welchem N gilt () d = ( ) ( ), fr alle ,
=1

wobei die die Menge der Polynome vom Grad kleiner oder gleich N bezeichnet. Man sagt in diesem Fall auch, die Quadraturformel ist exakt vom Grad . Eine genauere Betrachtung ergibt, dass die Mittelpunktsregel und die Trapezregel exakt vom Grade 1 sind. Die Simpson-Regel ist sogar exakt vom Grade 3.[2] Hat die Quadraturformel die Exaktheitsgrad und ist die Funktion ( + 1)-mal stetig dierenzierbar, so erhlt man mit der Taylor-Entwicklung () =
() (0 ) =0

( 0 ) + (( 0 )+1 ).

Nun ersetzt man bei der Quadratur die Funktion durch ihr Taylor-Polynom. Da der Exaktheitsgrad der Quadraturformel betrgt, integriert sie das Taylor-Polynom exakt. Folglich hngt der Fehler der Quadratur von der Lnge des Integrationsintervalls in ( + 1)-ter Potenz ab, und damit hat die Quadraturformel die Ordnung + 1. Summierte Quadraturformeln Zur Steigerung der Genauigkeit wendet man meist eine Quadraturformel nicht direkt auf das Intervall [, ] an, sondern unterteilt es zunchst in Teilintervalle und wendet die Quadraturformel dann auf die Teilintervalle an. Auf diese Weise erhlt man sogenannte summierte Quadraturformeln. Unterteilt man zum Beispiel das Intervall [, ] quidistant in Teilintervalle der Lnge := , so erhlt man fr 0 die Sttzstellen = + mit 0 = und = . Wendet man auf jedem Teilintervall [ , +1 ] die Trapezregel (, [ , +1 ]) := 1 (+1 ) [ ( ) + (+1 )] = [ ( ) + (+1 )] 2 2

an, so erhlt man die summierte Trapezregel (, [, ]) :=


=0

(, [ + , + ( + 1)]) ] 1 ( ) + (+1 ) = () + ( + ) + (). 2 2 2 2


=1

[ =0

Adaptivitt
In vielen Fllen ist es zum Erreichen der gewnschten Genauigkeit des Integrals nicht notwendig, das gesamte Intervall in kleine Teilintervalle zu zerlegen. Verhlt sich die Funktion zum Beispiel auf einem groen Teilintervall wie eine Gerade, so wird sie hier bereits durch die Mittelpunktsregel exakt integriert. In einem anderen Abschnitt kann es jedoch ntig sein, das Intervall in viele Teilintervalle zu unterteilen. Liegt eine Mglichkeit vor, den Fehler der aktuellen Nherung zu schtzen, so kann man die Unterteilung in Abhngigkeit der gegebenen Funktion whrend des Verfahrens entsprechend den Erfordernissen steuern. Diese Fhigkeit eines Verfahrens, sich selbst an das gegebene Problem anzupassen, wird als Adaptivitt bezeichnet. Einschluss der Lsung bei konvexen oder konkaven Funktionen Ist die gegebene Funktion auf dem Intervall [, ] dierenzierbar und auerdem konvex oder konkav, so schlieen die durch die Mittelpunktsregel und Trapezregel numerisch bestimmten Nherungen des Integrals und den Wert des exakten Integrals = () d ein, das heit es ist min { , } max { , } . Beweis: Ohne Beschrnkung der Allgemeinheit sei konkav auf dem Intervall [, ] (sonst ist konvex, und man betrachte dann , und ). Aufgrund der Konkavittsbedingung ist der Funktionswert der Sekanten () im Intervall [, ] immer kleiner oder gleich dem Funktionswert () und damit ist = () d () d = .
y y
A B

f (x)

f (x)

a
(a) Trapezregel

b x

a+b 2

b x

(b) Mittelpunktsregel

Abbildung 2: Einschluss der Lsung bei konkaver Funktion Der Inhalt der Flche unter der Tangenten () im Mittelpunkt des Intervalls entspricht der von der Mittelpunktsregel berechneten, denn die Dreiecke und in Abbildung 2(b) sind gleich gross. Aufgrund der Konkavittsbedingung kann die Funktion jedoch nicht oberhalb der Tangenten liegen und es gilt = () d () d = .

Diese Tatsache kann man bei der konvexen oder konkaven Funktionen nutzen und | | als Schtzung des Quadraturfehlers verwenden. In der Praxis fllt diese Schtzung aber eher pessimistisch aus. Wird die Funktion bereits an den Sttzstellen der Mittelpunkts- und der Trapezregel ausgewertet, so kann mittels der Simpson-Regel leicht die Approximation hheren Exaktheitsgrades bestimmt werden.

Umsetzung im Programm
Fr das Programm verfolgen wir folgende Strategie: Soll das Integral der Funktion im Intervall [, ] mit einem absoluten Fehler von hchstens berechnet werden, so wenden wir die Mittelpunkts- und Trapezregel an und berechnen den Fehlerschtzer. Ist die gewnschte Genauigkeit erreicht, so geben wir das mit der Simpson-Regel berechnete Ergebnis zurck. Wurde die Genauigkeit verfehlt, so wird das Intervall in zwei Teilintervalle gleicher Lnge zerlegt und auf jedem Teilintervall das Verfahren erneut durchgefhrt, wobei nun je die Genauigkeit 2 verlangt wird. Der Aufwand einer Quadratur wird oft in der Anzahl der Funktionsauswertungen gemessen. Da eine Funktionsauswertung sehr aufwndig sein kann, sollten Sie vermeiden, die Funktion mehrmals an der gleichen Stelle auszuwerten. Um die Wirkung der Adaptivitt zu beobachten, vergleichen Sie die Anzahl der bentigten Funktionsauswertungen mit der, die bei der Quadratur mit der summierten Trapezregel bei quidistanter Schrittweite notwendig ist. Verwenden Sie dabei die minimale Schrittweite, die im adaptiven Algorithmus ntig ist. Rekursive Programmierung Benutzen Sie die Technik der rekursiven Programmierung zur Implementierung Ihres Programms. Diese soll anhand des folgenden Beispiels erlutert werden. Beispiel: Berechnung der Fakultt Im Zusammenhang mit kombinatorischen berlegungen bentigt man gelegentlich zu einer natrlichen Zahl ihre Fakultt ! := . Dies lt sich leicht mit Hilfe einer Schleife programmieren. =1
2

unsigned int f a k u l t a e t ( unsigned int n ) { unsigned int f =1; i f ( n>1) { f o r ( unsigned int i =2; i<=n;++ i ) { f *= i ; } } return f ; }

Andererseits gilt fr die Fakultt die Beziehung (+1)! = !(+1). Dies legt eine andere Art der Umsetzung in ein Programm nahe:
2

unsigned int f a k u l t a e t ( unsigned int n ) { i f ( n<=1) { return 1 ; } else return n* f a k u l t a e t ( n1) ; } }

Die Programmiertechnik, bei der eine Funktion sich selbst wieder aufruft, heit rekursive Programmierung. Die Rekursionstiefe gibt dabei an, wie oft sich die Funktion selbst aufgerufen hat. Bei rekursiver Programmierung mu vom Programmierer sichergestellt werden, dass die Rekursionstiefe beschrnkt bleibt, das heit, dass nach endlicher Anzahl von Selbstaufrufen die Funktion endet, ohne sich wieder selbst aufzurufen. Anderenfalls liegt eine unterminierte Rekursion vor, die solange fortgesetzt wird, bis alle zur Verfgung stehenden Ressourcen (z.B. Speicher) belegt sind. Funktionsauswertungen und Zielgenauigkeit Fragen Sie zu Beginn Ihres Programmes den Benutzer nach dem zu rechnenden Beispiel. Fangen Sie mgliche Fehler bei der Eingabe ab. Rufen Sie anschlieend die Routine
void S t a r t ( int Bsp , double &a , double &b , double &e p s i l o n , bool G r a f i k=true , int Pause =300) ;

auf, die Ihnen die Grenzen des Intervalls und sowie die gewnschte Zielgenauigkeit des Ergebnisses epsilon zurckgibt. Die optionale Grakausgabe knnen Sie mit Grafik aktivieren. Der Parameter Pause steuert die Ausgabegeschwindigkeit. Die zu integrierende Funktion knnen Sie anschlieend durch einen Aufruf der Funktion
double f ( double x ) ;

auswerten. Geben Sie am Ende ihres Programmes das Resultat Ihrer numerischen Quadratur durch einen Aufruf von
bool E r g e b n i s ( double I ) ;

zurck. Es wird dann mit dem Wert des exakten Integrals verglichen und Ihr Ergebnis bewertet.

Verwendung von Makefiles


Programme, die aus mehreren Dateien bestehen, werden meist nicht per Hand kompiliert, stattdessen wird blicherweise der Befehl make verwendet. Die Ausfhrung dieses Befehls wird durch die Datei Makefile (bzw. makefile) gesteuert. In ihr stehen sowohl die Regeln (Befehlssequenzen), wie man beispielsweise meina3.o aus meina3.cpp erhlt, als auch die Abhngigkeiten der verschiedenen Dateien. Die Befehlssequenz zur Erzeugung einer bestimmten Datei wird immer dann ausgefhrt, wenn wenigstens eine der Dateien, von denen sie abhngt, jnger ist als sie selbst. Dies befreit den Programmierer von der Aufgabe, sich ber die Reihenfolge der Kompilierung Gedanken zu machen, und vermeidet berssiges Kompilieren von Dateien, die bereits auf dem neuesten Stand sind. Das Makefile zur Erzeugung des Testprogramms der aktuellen Aufgabe knnte zum Beispiel wie folgt aussehen (<Tab> steht fr das Tab(ulator)-Zeichen):
CC = g++ CFLAGS = O2 Wall LIBS = lGL l p t h r e a d lX11 lm meina3 : meina3 . o <Tab> $ (CC) o meina3 meina3 . o u n i t 3 . o IGL . o $ ( LIBS ) meina3 . o : meina3 . cpp <Tab> $ (CC) $ (CFLAGS) c meina3 . cpp clean : <Tab> rm meina3 . o meina3

Mit dem Codepaket wird diesmal ein vorbereitetes Makele mitgeliefert, das natrlich gerne nach den eigenen Wnschen umgestaltet werden darf. [1]

Literatur
[1] Dokumentation zu GNU Make. http://www.gnu.org/software/make/. [2] Dahmen, W. und A. Reusken: Numerische Mathematik fr Ingenieure und Naturwissenschaftler. Springer Verlag, Heidelberg, 2. Auflage, 2008.