Computergestützte Methoden der exakten Naturwissenschaften Daniel Sebastiani Vorwort Dieses Skript entstand aus der Vorlesung Computergestützte Methoden der exakten Naturwissenschaften am Fachbereich Physik der Freien Universität Berlin im Wintersemester 2009/2010. Die Vorlesung orientiert sich inhaltlich in Teilen an dem Buch Stoer/Bulirsch: Numerische Mathematik sowie an der Vorgängervorlesung aus den vorhergehenden Jahren, die von E.K.U. Groß gehalten wurde. Mein großer Dank gilt Arvid Conrad Ihrig, der das handschriftliche Vorlesungsmanuskript im Sommer 2011 vollständig in LATEX gesetzt hat, vielerorts inhaltlich überarbeitet und an allen relevanten Stellen mit anschaulichen Grafiken versehen hat. Ohne ihn gäbe es dieses Skript nicht in der vorliegenden Form. Sollten sich trotz aller Sorgfalt dennoch Fehler eingeschlichen haben, so sind wir natürlich sehr dankbar für Hinweise an [email protected] oder [email protected] Berlin, Oktober 2011 Daniel Sebastiani 3 Inhaltsverzeichnis 1. Fehlerarithmetik 1.1. Näherungsfehler . . . . . . . . . . . . . . . . 1.2. Modellfehler . . . . . . . . . . . . . . . . . . 1.3. Rundungsfehler . . . . . . . . . . . . . . . . 1.3.1. Binärdarstellung von reellen Zahlen . 1.3.2. Rundung . . . . . . . . . . . . . . . . 1.4. Fehlerfortpflanzung in Algorithmen . . . . . 1.4.1. Formale Darstellung von Algorithmen 1.4.2. Fehlerfortpflanzung im Detail . . . . 1.4.3. Konditionszahlen von Algorithmen . . . . . . . . . . 7 7 10 12 12 14 15 16 18 19 . . . . 23 23 26 29 33 3. Approximative Darstellung von Funktionen 3.1. Interpolation mit Polynomen . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Interpolation mit Lagrange-Polynomen . . . . . . . . . . . . . 3.1.2. Neville-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Newtondarstellung, Horner-Schema und dividierte Differenzen 3.1.4. Mögliche Probleme: Extrapolation und Runges Phänomen . . 3.2. Interpolation mit rationalen Funktionen . . . . . . . . . . . . . . . . 3.3. Kubische Spline-Interpolation . . . . . . . . . . . . . . . . . . . . . . 3.4. Trigonometrische Interpolation . . . . . . . . . . . . . . . . . . . . . . 39 40 40 42 44 48 51 53 58 4. Fouriertransformationen 4.1. Trigonometrische Interpolation und Fouriertransformationen . . . . . 63 63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Grundlagen linearer Gleichungssysteme 2.1. Endlich dimensionale Vektorräume . . . . . . . . . . . . . . 2.1.1. Normen auf Vektorräumen von Matrizen . . . . . . . 2.2. Gaußsches Eliminationsverfahren . . . . . . . . . . . . . . . 2.3. Iterative Verfahren zur Lösung von LGS (”Linear Descent“) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Inhaltsverzeichnis 4.2. Algorithmik der Fouriertransformation . . . . . . . . 4.2.1. Diskrete Fourier-Transformation . . . . . . . . 4.2.2. Fast Fourier Transform . . . . . . . . . . . . . 4.3. Bedeutung der Fouriertransformation in der Numerik 5. Numerische Integration 5.1. Quadratur nach Newton/Cotes 5.2. Integration nach Gauß . . . . . 5.3. Monte Carlo Integration . . . . 5.3.1. Importance Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Bestimmung von Nullstellen 6.1. Einfache Algorithmen zur Nullstellensuche . . . 6.1.1. Intervallhalbierungsverfahren . . . . . . 6.1.2. Fixpunkte und sukzessive Approximation 6.1.3. Newtonverfahren . . . . . . . . . . . . . 6.2. Nichtlineare Gleichungssysteme . . . . . . . . . 6.3. Nullstellen von Polynomen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 65 66 69 . . . . 77 77 82 91 93 . . . . . . 97 97 97 99 102 104 105 7. Extrema und nichtlineare Optimierung 111 7.1. Steepest Descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 7.2. Conjugate Gradients . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.2.1. Preconditioning . . . . . . . . . . . . . . . . . . . . . . . . . . 120 8. Eigenwertprobleme 121 8.1. Die Potenzmethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 8.2. Householder-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . 126 9. Matrix-Inversion 133 9.1. Matrix-Inversion mit Gauß-Elimination . . . . . . . . . . . . . . . . . 133 9.2. QR-Zerlegung und Matrixinversion . . . . . . . . . . . . . . . . . . . 134 10.Lineare Regression 139 A. Anhang 149 A.1. Liste der Algorithmen . . . . . . . . . . . . . . . . . . . . . . . . . . 149 A.2. Liste der Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 A.3. Liste der Sätze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6 1. Fehlerarithmetik Eines der grundlegenden Ziele in den Naturwissenschaften ist die Beschreibung der Natur durch einfache Gleichungen und deren Lösungen. Diese Gleichungen sind normalerweise jedoch nicht mit Papier und Bleistift lösbar. Stattdessen kann man entweder die Gleichungen mit Randbedingungen bis zur Lösbarkeit vereinfachen oder aber versuchen diese Gleichungen numerisch zu lösen. Dabei ist es eine wichtige Fähigkeit, die Genauigkeit numerischer Rechenergebnisse beurteilen zu können. Bei der numerischen Lösung eines Problems können verschiedene Fehlerquellen auftreten: 1. Eingabefehler (Startwerte) 2. Darstellungsfehler (Näherungs-/Approximationsfehler) 3. Modellfehler 4. Rundungsfehler Die Fehler, die durch Ungenauigkeiten in den Eingabedaten entstehen, sind mit den Mitteln der Numerik natürlich nicht korrigierbar. Darstellungsfehler entstehen durch die Verwendung von Näherungen anstelle der exakten (mathematischen) Ausdrücke und lassen sich durch eine geeignete Wahl der verwendeten Approximationen kontrollieren. Modellfehler entstehen durch die Verwendung eines einfacheren Modells anstelle des echten Problems und lassen sich mit ein dem ursprünglichen Problem ähnlicherem Modell reduzieren. Durch die numerische Darstellung einer Zahl und der damit verbundenen endlichen Genauigkeit entstehen außerdem noch Rundungsfehler. 1.1. Näherungsfehler Viele mathematische Ausdrücke, die im Rahmen physikalischer Problemstellungen auftreten sind in ihrer exakten Formulierung nicht numerisch berechenbar oder zu aufwändig zu berechnen. Die Ersetzung dieser Probleme durch einfachere Ersatzprobleme führt dann zu Näherungsfehlern, zusätzlich zu den Fehlern, die aus nicht 7 1. Fehlerarithmetik exakten Startwerten und Rundungen entstehen. Häufig auftretende Probleme dieser Art sind beispielsweise Funktionen, die in ihrer exakten Darstellung durch unendliche Reihen oder ähnliches definiert sind. Beispiel 1.1. Bei der Berechnung der Exponentialfunktion greift man in der Regel auf ihre Reihendarstellung zurück. Um diese unendliche Reihe numerisch handhaben zu können, nähert man sie jedoch durch eine endliche Taylorreihe an. ex = ∞ X xn n=0 n! → ex ≈ N X xn n=0 n! Beispiel 1.2. Die Lösungen der Schrödinger-Gleichung können durch die Basis des sie enthaltenden Funktionenraumes dargestellt werden. Da diese Basis jedoch unendlich ist, ist die numerische Handhabung dieser “unendlichdimensionalen“ Lösung problematisch. Als numerisch lösbares Ersatzproblem bietet sich die Verwendung eines endlichen Satz an orthonormalen Basisfunktionen an. |Ψi ≈ b |Ψi = E |Ψi → ⇒H N X n=0 N X n=0 αn |ϕn i b |ϕn i = E αn H N X αn |ϕn i n=0 Neben der Approximation unendlicher Ausdrücke, ist auch die Näherung kontinuierlicher Variablen durch eine Diskretisierung auf ein “Gitter” eine häufig anzutreffende Variante des Näherungsfehlers. In dem Beispiel mit der Schrödinger-Gleichung tritt dieser Fehler natürlich zusätzlich zu dem Fehler aus der Darstellung durch die endliche Basis auf. Beispiel 1.3. Die Lösung einer Differentialgleichung kann man durch die Untersuchung des Ersatzproblems finden, bei dem man den Vektorraum auf eine endliche Menge von Gitterpunkten reduziert. Durch die Beschränkung der Untersuchung der Differentialgleichung auf diese Gitterpunkte führt man das kontinuierliche Problem in eine diskrete Differenzengleichung über. d ∆f f (x) = f (x) → = f (x) dx ∆x Besitzt die Lösung eine oder mehrere Polstellen, ergeben sich bei diesem Ansatz natürlich Probleme. 8 1.1. Näherungsfehler f(x) f(x) xk ... x1 x2 x3 Δf(x) Δx x x (a) Diskretisierung einer kontinuierlichen Variable (b) Differenzenquotienten als numerische Approximation von Ableitungen Abbildung 1.1.: Verfeinerung der Diskretisierung zur Kontrolle des Näherungsfehlers Beispiel 1.4. Ähnlich kann man auch bei der Berechnung von Integralen verfahren, indem man das Integral in eine Riemann-Summe umschreibt und diese dann durch eine endliche Summe approximiert. Z f (x)dx → N X ∆xi f (xi i=1 f(x) f(x) Die auf diese Weise entstehenden Fehler sind (im Prinzip) durch die Feinheit des Gitters oder die Dimensionalität der Basis kontrollierbar. x (a) grobe Diskretisierung x (b) feine Diskretisierung Abbildung 1.2.: Verfeinerung der Diskretisierung zur Kontrolle des Näherungsfehlers Eine Verfeinerung, beziehungsweise Vergrößerung dieser bringt aber auch Nachteile mit sich: es müssen mehr Rechenoperationen durchgeführt werden und die Rundungsfehler nehmen darüber hinaus auch zu. Beispiel 1.5. Verfeinert man das Gitter für die Diskretisierung der Differentialgleichung aus Beispiel 1.3 so werden sowohl die Differenzen der Funktionswerte als auch die Abstände zwischen den Gitterpunkten immer kleiner. Durch die immer kleiner werdenden Differenzen und die endliche Genauigkeit (mehr dazu in Abschnitt Ab- 9 1. Fehlerarithmetik schnitt 1.3) haben Rundungsfehler in dem Differenzenquotienten dann einen zunehmenden Einfluss auf die Genauigkeit des Ergebnisses. Die Kunst der numerischen Physik ist nun, den optimalen Kompromiss zwischen den einzelnen Fehlern und dem Rechenaufwand zu finden. 1.2. Modellfehler Die Grundgleichungen der Physik haben oft eine erfreulich einfache Struktur, die Einteilchen-Schrödinger-Gleichung beispielsweise ist eine lineare Differentialgleichung mit nur einem Differentialoperator und einer Potentialfunktion. Aber selbst die einfachsten Gleichungen führen in der Praxis meist zu einer solchen Komplexität der Lösungen, dass eine direkte numerische Berechnung undenkbar ist. Zumeist ist die Dimensionalität des Systems das Hauptproblem. Beispiel 1.6. Am Beispiele der Schrödinger-Gleichung lässt sich dies anschaulich erklären. Betrachtet man zunächst die Schrödinger-Gleichung für ein einzelnes Teilchen in drei Dimensionen. ~2 ∇ + V (~r) Ψ(~r) = EΨ(~r) − 2m Ein naheliegender Lösungsansatz ist hier hier die Diskretisierung des Raumes auf ein Gitter. Mit einer Einteilung von je 10 Gitterpunkten entlang jeder Achse kommt man also auf eine Gesamtzahl von 1000 Gitterpunkten beziehungsweise Funktionswerten für die Lösungswellenfunktion Ψ~r. Betrachtet man nun jedoch statt eines ein- - - - 2s,2p 1s - + (a) 3D-Gitter für Einteilchen-Wellenfunktion - - - (b) Stickstoffatom Abbildung 1.3.: schematische Darstellung des Dimensionalitätsproblems zelnen Teilchens ein Stickstoff-Atom, hat man sieben Elektronen im System und die 10 1.2. Modellfehler Vielteilchen-Schrödinger-Gleichung zu lösen. Die Gesamtwellenfunktion ergibt sich als Produkt der einzelnen Wellenfunktionen und die Dimensionalität des Problems skaliert entsprechend. b= H X e2 X X ~2 Ze2 ∇2i + − 2m |~ri − ~rj | |~rcore − ~ri | i,j i i Bei der Anwendung derselben Diskretisierung haben wir nun also eine Gesamtwellenfunktion, die von 7 verschiedenen Ortskoordinaten abhängt und damit effektiv ein 21-dimensionales Problem darstellt. Da jede Dimension 10 Gitterpunkte besitzt, sind also 1021 Funktionswerte zur Darstellung der Lösung notwendig. Unter der Annahme der Schätzwerte eines Platzbedarfs von 10 Byte pro Zahl und einer Speicherkapazität von 1010 Byte pro DVD und eines DVD-Gewichts von 10g bräuchte man dafür bereits 107 t an DVDs. Dieses Komplexitätsproblem verschärft sich exponentiell mit der Systemgröße. Ein einfaches Wassermolekül würde bereits einen Speicherplatz von 1016 t DVDs verbrauchen. Da eine direkte Behandlung des Problems also keine Option ist, muss eine Vereinfachung der Fragestellung vorgenommen werden - die Modellbildung. Beispiel 1.7. Eine mögliche Vereinfachung des eben angeführten Problems lässt sich durch Ausnutzung der starken Bindung der 1s-Elektronen erzielen. Aufgrund der Kernnähe fasst man den Kern und die kernnahen 1s-Elektronen zu einem effektiven Potential (“Pseudopotential”) zusammen und reduziert auf diese Weise die Dimensionalität des Problems. b = EΨ → H bpseudo Ψpseudo = Epseudo Ψpseudo HΨ Die Aufgabe des Physikers besteht nun darin, ein Pseudopotential Vpseudo zu finden, welches die echten Valenzorbitale möglichst gut reproduziert. Der Unterschied Ψ(~ri ) ↔ Ψpseudo (~ri ) ist der Modellfehler. Oft ist man in der Situation, bei einem gegebenen Problem entweder die echte Gleichung mit großen Näherungsfehlern (grobes Gitter oder dergleichen) oder eine Modellgleichung mit einem deutlich kleineren Näherungsfehlern lösen zu können. Ein zentrales Problem des Modellfehlers ist, dass man ihn schwer kontrollieren kann, da hierzu die echten Gleichungen oder ein besseres Modell mit Näherungsfehlern derselben Größe zu lösen wären. 11 1. Fehlerarithmetik 1.3. Rundungsfehler Beim Ausführen von Rechenoperationen auf der Menge der reellen Zahlen treten im Computer Rundungsfehler auf, deren Ursprung im Folgenden beleuchet werden soll. Wie weitreichend die Auswirkungen sein können wird in Abschnitt 1.4 aufgezeigt. 1.3.1. Binärdarstellung von reellen Zahlen Reelle Zahlen werden im Computer im Gleitpunktformat abgespeichert. Gegenüber dem Festpunktformat ermöglicht dieses eine deutlich bessere Handhabung sehr großer und sehr kleiner Zahlen ohne einen unnötig hohen Bedarf an Speicherplatz. Festpunktformat 4 1234.567 = 0. 1234567 | {z } 10 |{z} Mantisse Gleitpunktformat Exponent Die Computer-interne Darstellung dieser Zahlen erfolgt nicht im Dezimalsystem, sondern im Binärsystem, da nur die Zustände “keine Spannung“ und “Spannung” existieren. Eine reelle Zahl wird im Computer also wie folgt dargestellt: x = ± N X αn 2n + α0 20 + n=1 N, M ∈ N M X ! α−m 2−m m=−1 αi ∈ {0, 1} Theoretisch lässt sich auf diese Weise jede reelle Zahl durch eine passende Wahl von N und M beliebig genau darstellen. In der Informatik werden die hier mit αi bezeichneten Werte als “Bit“ bezeichnet und stellen die kleinste Speichereinheit dar, in der Anwendung werden je 8 Bit als “Byte“ zusammengefasst. Neben der Beschränkung des Computers auf die Verwendung endlich vieler Bits zur Darstellung einer Zahl ergeben sich jedoch noch weitere Schwierigkeiten in der Anwendung. Beispiel 1.8. Im folgenden Beispiel sind alle mit Subskript 10 versehenen Zahlen als dezimal dargestellte Zahlen zu verstehen und alle mit Subskript 2 als binäre Darstellungen. (5.0625)10 = 1 · 22 + 0 · 21 + 1 · 20 + 0 · 2−1 + 0 · 2−2 + 0 · 2−3 + 1 · 2−4 = (101.0001)2 = (0.1010001)2 · 2(11)2 12 1.3. Rundungsfehler Die Darstellung einer Zahl im Binärsystem kann sich aber auch als kompliziert oder sogar nicht-endlich erweisen, auch wenn sie im Dezimalsystem eine einfache Darstellung besitzt, wie an folgendem Beispiel gut zu erkennen ist. (12.34)10 = 1 · |{z} 23 +1 · |{z} 22 +0 · |{z} 21 +0 · |{z} 20 +0 · |{z} 2−1 =8 −2 =4 =2 =1 =0.125 −4 =0.5 1 · |{z} 2 +0 · |{z} 2 +1 · |{z} 2 +0 · |{z} 2 +1 · |{z} 2−6 + . . . ? =0.25 −3 =0.625 −5 =0.03125 =0.015625 = (1101.010101 . . .)2 = (0.1101010101 . . .)2 · 2(100)2 Im Computer ist die Anzahl der Bits zur Darstellung einer Zahl aber wie bereits erwähnt endlich und, bedingt durch die Prozessorarchitektur, auch nicht frei wählbar, um eine effektive Ausführung der Rechenoperationen zu gewährleisten. Die in den meisten Programmiersprachen implementierten Gleitpunktzahlenformate float und double haben in der Regel eine Länge von 32 respektive 64 Bits. Mit dieser Wortlänge muss allerdings die komplette Zahl dargestellt werden, also sowohl Mantisse als auch Exponent. Die übliche Aufteilung ist in der folgenden Tabelle dargestellt. Bits für float double Vorzeichen Exponent Mantisse 1 8 23 1 11 52 Tabelle 1.1.: Aufteilung der Bits auf die verschiedenen Komponenten der Zahl bei float und double Aufgrund dieser Einteilung können floats 6 und doubles 15 Dezimal-Ziffern ab der ersten signifikanten Stelle eindeutig unterscheiden. Bemerkung. Aufgrund der Binärdarstellung ist diese Aussage natürlich nicht ganz exakt, aber nach der angegeben Anzahl Ziffern ist es nicht mehr sichergestellt, dass zwei unterschiedliche Zahlen nicht dieselbe Näherungsdarstellung besitzen und somit für den Computer unterscheidbar sind. Außerdem bedeutet diese endliche Darstellung auch, dass auch die Menge der im Computer darstellbaren Zahlen endlich ist. Demzufolge existiert sowohl eine größte als auch eine kleinste darstellbare Zahl und für den ”Computer-Zahlenraum” M ergeben sich folgende Probleme: • Sei x ∈ M die größte darstellbare Zahl → x + x ∈ /M 13 1. Fehlerarithmetik • Sei y ∈ M die kleinste darstellbare Zahl → y · 2−1 ∈ /M In beiden Fällen liegen die Ergebnisse also ausserhalb des darstellbaren Bereichs, das Ergebnis der ersten Operation ist die symbolische Konstante ∞, die zweite liefert die Zahl 0 als Ergebnis. Beide Extremfälle sind im Allgemeinen unerwünschte Ergebnisse. Eine größere Bedeutung für die Numerik haben jedoch die Vorgänge, die zwischen diesen beiden Extremen stattfinden: Rundungen. 1.3.2. Rundung Die Rundung im Computer basiert auf denselben Regeln wie das aus der Schule bekannte “Auf- und Abrunden” oder mathematisch ausgedrückt ist der Rundungswert rd(x) die Zahl y im vorgegebenen Zahlenraum M , die den geringsten Abstand zur echten Zahl x hat. x∈ /M 1 rd(x) = argminy∈M ||x − y|| Der relative Rundungsfehler ε und der maximale relative Rundungsfehler εmax ergeben sich dann als: rd(x) − x x = sup ε(x) ε(x) = εmax x∈R Zur sinnvollen Anwendung dieser Definition in der Numerik ist x aus dem Teilintervall der reellen Zahlen zu wählen, die im Computer dargestellt werden können. Beispiel 1.9. Im Dezimalsystem mit 4 Ziffern in der Mantisse verlaufen Rundungen also wie folgt: rd(0.12345) = 0.1235 rd(3.141592) = rd(0.3141592 · 101 ) = 0.3142 · 101 Der maximale relative Rundungsfehler ergibt sich in diesem Beispiel als 5 · 10−4 . 1 Die Funktion argmin liefert als Ergebnis die Menge an Argumenten, die den nachfolgenden Ausdruck minimieren. 14 1.4. Fehlerfortpflanzung in Algorithmen Der maximale relative Fehler hängt demzufolge von der Wortlänge, die die verwendete Computerarchitektur verwendet ab. Im Binärsystem mit t Mantissenziffern ergibt sich dieser, auch Maschinengenauigkeit genannte, Wert dann als: εmax = 2−t rd(x) = x(1 + ε) |ε| ≤ εmax 1.4. Fehlerfortpflanzung in Algorithmen Nach den Betrachtungen des vorherigen Abschnitts ist es naheliegend, zu überlegen, was genau bei der Ausführung elementarer Rechenoperationen passiert. Denn das Ergebnis einer binären Operation auf zwei Zahlen aus M muss nicht zwangsweise wieder in M liegen und wird deswegen gerundet. Formal lassen sich Ersatzoperationen für x, y ∈ M wie folgt definieren: x ⊕ y := rd(x + y) x y := rd(x − y) ... Eine Ausnahme stellt natürlich der Fall eines Ergebnisses dar, das größer als der darstellbare Zahlenbereich ist. In diesem wird die Konstante ∞ zurückgegeben. Diese modifizierten Rechenoperationen führen dazu, dass die bekannten arithmetischen Gesetze nicht mehr uneingeschränkt gelten. Beispiel 1.10. Die folgenden Beispiele sind der Anschaulichkeit halber mit einer Darstellungsgenauigkeit von 4 Mantissenstellen und einer Exponentenziffer im Dezimalsystem verfasst. Bei der Addition oder Subtraktion von Zahlen, deren Exponenten sich deutlich unterscheiden, kann es passieren, dass die kleinere Zahl im Rundungsfehler verloren geht. x⊕y = x falls |y| < εmax |x| 1234 ⊕ 0.5 = rd(1234.5) = 1234 Die Multiplikation zweier kleiner Zahlen oder die Division mit deutlich unterschiedlichen Exponenten kann ebenfalls zu unerwünschten Ergebnissen führen. x⊗y = 0 falls x, y 6= 0 ; y zu klein 15 1. Fehlerarithmetik (0.2 · 10−5 ) ⊗ (0.3 · 10−6 ) = rd(0.6 · 10−12 ) = 0 xy = ∞ falls x, y 6= 0 ; xzu groß und y zu klein (0.6 · 105 ) (0.3 · 10−6 ) = rd(0.2 · 1012 ) = ∞ Ebenso sind die Assoziativitätsgesetze der Grundrechenarten nicht mehr uneingeschränkt gültig. x ⊕ (y ⊕ z) 6= (x ⊕ y) ⊕ z −3 (0.1111 · 10 ) ⊕ (−0.1234 ⊕ 0.1243) = (0.1111 · 10−3 ) ⊕ (0.9 · 10−3 ) = 0.1011 · 10−2 ((0.1111 · 10−3 ) ⊕ −0.1234) ⊕ 0.1243 = 0.1233 ⊕ 0.1243 = 0.1 · 10−2 Wie zu erkennen ist, ist der relative Fehler zum echten Ergebnis 0.10111 · 10−2 in den beiden Beispielen deutlich unterschiedlich und in zweiterem Falle deutlich größer als die Maschinengenauigkeit annehmen lässt. Doch auch der erste Fall, in dem die führenden Mantissenstellen ausgelöscht werden, kann gefährlich werden, wenn die Eingabewerte bereits fehlerbehaftet sind: (0.2 ⊕ 0.11 · 10−3 ) (0.2 0.11 · 10−3 ) = 0.2001 0.1999 = 0.0002 Im Vergleich zum echten Ergebnis 0.00022 liegt der relative Fehler hier bei 10%. 1.4.1. Formale Darstellung von Algorithmen Aufgrund der eben gezeigten Effekte ist es wichtig zwischen verschiedenen, mathematisch äquivalenten Realisierungen eines Problems zu unterscheiden. Im Folgenden soll nun die Fehlerfortpflanzung in Algorithmen genauer untersucht werden. Hierzu muss ein Algorithmus zuerst etwas formaler definiert werden: Definition 1.1 (Algorithmus) Ein Algorithmus ϕ ist eine eindeutig festgelegte Reihenfolge von elementaren Operationen, die aus einer endliche Menge an Eingabedaten x = {x1 . . . xn } eine endliche Menge an Ausgabedaten y = {y1 . . . ym } berechnet. ϕ : Rn → Rm y = ϕ(x) 16 1.4. Fehlerfortpflanzung in Algorithmen Jeder Zwischenschritt des Algorithmus lässt sich durch einen Vektor x(i) aus Rni darstellen: ϕ(i) : Rni → Rni+1 x(i+1) = ϕ(i) (x(i) ) Der Algorithmus in seiner Gesamtheit ist dann die Verkettung aller I Einzelschritte. ϕ = ϕ(I) ◦ ϕ(I−1) ◦ . . . ϕ(2) ◦ ϕ(1) (1.1) Beispiel 1.11. Die Assoziativgesetze gelten in der Numerik nicht mehr unbedingt, wie in Beispiel 1.10 gezeigt wurde. Die beiden dort gezeigten unterschiedlichen Rechenwege in der eben eingeführten Definition des Algorithmus sehen wie folgt aus: y = ϕ(a, b, c) = a + b + c ! a + b (0) Alg. 1: ϕ(a,b,c) = c (1) ∈R ϕ(u,v) = u + v Alg. 2: (0) ϕ(a,b,c) = a b+c (1) ϕ(u,v) = u + v ∈ R2 ! ∈ R2 ∈R Beispiel 1.12. Für das folgende Beispiel mag die zweite Variante auf den ersten Blick umständlich und überflüssig erscheinen, ihr Sinn wird aber später deutlich werden, wenn die Konditionszahlen der Probleme analysiert werden. p y = ϕ(p, q) = −p + p2 + q p (0) ∈ R3 Alg. 1: ϕ(p,q) = q p2 ! p (1) ϕ(p,q,s) = ∈ R2 s+q ! p (2) √ ϕ(p,t) = ∈ R2 t (3) ϕ(p,u) = −p + u ∈R 17 1. Fehlerarithmetik Alg. 2: p = q p2 p = q s+q p = q √ t ! q = p+u (0) ϕ(p,q) (1) ϕ(p,q,s) (2) ϕ(p,q,t) (3) ϕ(p,q,u) (4) ∈ R3 ∈ R3 ∈ R2 ∈R ϕ(q,v) = q/v Die zweite Variante dieses Beispiels (ϕ(p, q) = ∈ R3 √q p+ p2 +q ) ist zwar für Fälle, in denen der Nenner gegen 0 tendiert möglicherweise instabil, ist aber weniger anfällig für Auslöschungseffekte, die in der ersten Variante für kleine q auftreten können. Wendet man diese beiden Algorithmen nun auf dieselben Ausgangswerte an, kommt man für eine Genauigkeit von 12 Mantissenstellen zu folgenden Ergebnissen: p = 1000 q = 0.018000000081 Alg. 1 : 0.900030136108 · 10−5 Alg. 2 : 0.899999999999 · 10−5 exakt : 0.9 · 10−5 1.4.2. Fehlerfortpflanzung im Detail Verschiedene Algorithmen können also zu verschiedenen Lösungen für dasselbe mathematische Problem führen. Um die Ursache dafür zu verstehen, werden der relative Rundungsfehler und seine Auswirkungen bei mehreren aufeinander folgenden Rechenoperationen nun am Beispiel 1.11 ausführlicher betrachtet. y = ϕ(a, b, c) = a + b + c Alg. 1: η = a ⊕ b = (a + b)(1 + ε1 ) y = η ⊕ c = (η + c)(1 + ε2 ) 18 1.4. Fehlerfortpflanzung in Algorithmen = [(a + b)(1 + ε1 ) + c] (1 + ε2 ) 2 a+b = (a + b + c) 1 + ε2 + ε1 + σ(ε1 ε2 ) a+b+c y = ϕ(a, b, c) = a + b + c Alg. 2: η = b ⊕ c = (b + c)(1 + ε3 ) y = a ⊕ η = (a + η)(1 + ε4 ) b+c ε3 + σ(ε3 ε4 ) = (a + b + c) 1 + ε4 + a+b+c Alle relativen Fehler |εi | sind an sich kleiner als εmax . Aufgrund der Vorfaktoren beeinflusst kann der Gesamtfehler aber deutlich größer als εmax werden. Bei dem gegebenen Problem ist der Algorithmus 1 also deutlich besser, wenn |a + b| |b + c|. Der zweite Algorithmus hingegen ist zu bevorzugen, wenn |a + b| |b + c| gilt. Je nach den konkreten Werten von a, b und c kann diese simple Summe bereits einen Genauigkeitsverlust von mehreren Stellen bedeuten. Beispiel 1.13. Für den Fall |a| |b| und b ≈ −c lässt sich dies leicht an einem Beispiel zeigen. a=1 b = 0.5 · 105 a+b ≈ 0.49 · 102 a+b+c b+c ≈ 0.99 a+b+c c = −0.49 · 105 Der relative Fehler unterscheidet sich hier also um 2 Größenordnungen, da bei dem ersten Algorithmus eine deutliche Verstärkung des Fehlers auftritt. 1.4.3. Konditionszahlen von Algorithmen Das in Teilabschnitt 1.4.2 vorgestellte, relativ umständliche Verfahren zur Fehleranalyse lässt sich zu den sogenannten “Konditionszahlen” verallgemeinern. Hierzu wird 2 σ sind vernachlässigbare Restterme der angegeben Ordnung (und allgemein auch höherer Ordnung) 19 1. Fehlerarithmetik wieder ein beliebiger Algorithmus betrachtet: ϕ = Rn → Rm ϕ1 (x) .. , ϕ(x1 . . . xn ) = . ϕm (x) Wie wirkt sich ein Fehler in den Ausgangswerten xi nun auf das Endergebnis aus? Die Fehleranalyse muss letztendlich wieder für jeden Teilschritt des Algorithmus (wie in Gleichung 1.1 definiert) seperat durchgeführt werden, liefert aber dieses Mal ein allgemeingültiges Verfahren, in dem die einzelnen Teilschritte unabhängig voneinander betrachtet werden können um die Robustheit eines Algorithmus gegenüber Fehlern in den Ausgangswerten zu bewerten. Im folgenden wird deswegen nur ein beliebiger Teilschritt ϕ mit einem Vektor x an Eingabewerten und einem Vektor y an Ausgabewerten betrachtet. Sei hierfür xj der exakte Wert einer Variable und x̃j = xj + ∆xj ∆xj ε xj = xj der Eingabewert mit einem absoluten Fehler, der relative Fehler von xj . Bekommt der Algorithmus nun x̃ statt x als Eingabe3 , so ist das Ergebnis ỹ = ϕ(x̃) statt dem exakten Ergebnis ϕ(x). Der absolute und der relative Fehler von y ergeben sich dann als: ∆yi = ỹi − yi = ϕi (x̃) − ϕi (x) n X ∂ϕi 2 = ∆xj + σ(∆x ) ∂x j x j=1 Anschaulicher lässt sich dies in ∆y1 .. . = ∆ym einer Matrixdarstellung4 darstellen: ∂ϕ1 ∂ϕ1 . . . ∂x ∆x 1 ∂x1 n .. .. .. .. · . + σ(∆x2 ) . . . ∂ϕm ∂ϕm . . . ∆xn ∂x1 ∂xn x Der relative Fehler ergibt sich aus diesen Betrachtungen folglich als: n X xj ∂ϕi ∆xj ∆yi = + σ(∆x2 ) εyi (x, ∆x) = ϕi (x) ϕ (x) ∂x x i j x j j=1 3 Ob es sich dabei nun um Fehler in den Startwerten oder Rundungsfehler aus vorangegangenen Teilschritten handelt, spielt keine Rolle. 4 Hierbei handelt es sich um eine Matrix im Funktionenraum (genauer gesagt um die Jakobi-Matrix), nicht im Rm×n . 20 1.4. Fehlerfortpflanzung in Algorithmen n X xj ∂ϕi 2 = εxj + σ(∆x ) ϕ (x) ∂x i j x j=1 = n X kij εxj + σ(∆x2 ) j=1 Die Beträge der Koeffizienten |kij | sind die “Konditionszahlen” des Algorithmus und beschreiben wie stark die relativen Fehler in den Eingabedaten sich auf das Endergebnis auswirken. Sind alle |kij | ≈ 1 dann nennt man den Algorithmus “gut konditioniert”. Werden eine oder mehere der Konditionszahlen aber groß, ist der Algorithmus “schlecht konditioniert”. Beispiel 1.14. Mit den Konditionszahlen lässt sich der Unterschied, der im Zahlenbeispiel aus Beispiel 1.12 aufgetreten ist, gut nachvollziehen. Hierzu sollen zuerst die Konditionszahlen des kompletten Problems untersucht werden. p y = ϕ(p, q) = −p + p2 + q ∂ϕ p 1 = −1 + p = −p ϕ 2 2 ∂p p +q p +q 1 ∂ϕ = p ∂q 2 p2 + q ! ! p ∂ϕ q ∂ϕ εy = εp + εq ϕ ∂p p,q ϕ ∂q p,q q 1 p p · εq p2 + q −p + p2 + q 2 p2 + q p p + p2 + q p = −p · εp + p · εq p2 + q 2 p2 + q = −p p · εp + Solange die Vorfaktoren ≤ 1 sind ist die Gesamtformel also gut konditioniert, für q ≈ −p2 divergieren die Konditionszahlen jedoch gegen ∞. In dem konkreten Beispiel, war dies jedoch nicht der Fall, der Fehler stammt also nicht aus der Kondition der Gesamtformel, sondern aus einem schlecht konditionierten Teilschritt. Da die ersten Teilschritte identisch sind, ist es ausreichend sich die Konditionszahlen des bzw. der letzten Teilschritte(s) anzuschauen. Alg. 1 y = −p + u Alg. 2 v =p+u q y= v 21 1. Fehlerarithmetik Für die gegebenen Werte p = 1000 und q = 0.018000000081 ergeben sich die folgenden Konditionszahlen: 1000 p ∂y ≈ − −5 = −108 Alg. 1: y ∂p 10 u ∂y 1000 ≈ = 108 y ∂u 10−5 1000 p ∂v ≈ =1 Alg. 2, Schritt 1: v ∂p 1000 u ∂v 1000 ≈ =1 v ∂u 1000 Schritt 2: 10−2 1 q ∂y ≈ =1 y ∂q 10−5 v v ∂y 103 −q ≈ =1 y ∂v 10−5 v 2 Wie an den Konditionszahlen eindeutig zu erkennen ist, tritt im Algorithmus 1 eine massive Verstärkung der Eingangsfehler auf, während im Algorithmus 2 keine nennenswerte Verstärkung der Fehler auftritt. Für diese Wahl der Startwerte ist Algorithmus 2 also deutlich besser geeignet. Bemerkung. Konditionszahlen spielen insbesondere bei Operationen mit Matrizen eine wichtige Rolle. Zur Lösung des linearen Gleichungssystems Ax = b wird die Matrix A invertiert, der relative Fehler des Lösungsvektors x ergibt sich also als: ∆x ||A−1 ∆b|| = x ||A−1 b|| Um die Güte der Lösung nun allgemein beurteilen zu können, untersucht man das Maximum des Verhältnisses der relativen Fehler des Ergebnisses und der Eingabewerte: ||A−1 ∆b|| ||A−1 b|| ||b|| ||A−1 ∆b|| · = max n max b,∆b∈R b,∆b∈Rn ||∆b|| ||A−1 b|| ||∆b|| ||b|| Der erhaltene Ausdruck beinhaltet die induzierte Matrixnorm und führt zu dem folgenden Resultat für die Konditionszahl κ(A): λmax λmin Die λ sind hier die Eigenwerte der Matrix. Diese Konditionszahl ist insbesondere in der Konvergenztheorie von Optimierungsalgorithmen wichtig und gibt Aufschluss über die lokale Konvergenzgeschwindigkeit. κ(A) = ||A−1 || · ||A|| = 22 2. Grundlagen linearer Gleichungssysteme Lineare Gleichungssysteme spielen in der numerischen Physik eine entscheidene Rolle, weil diese im Prinzip exakt lösbar sind und sich viele Probleme (näherungsweise) auf LGS zurückführen lassen und auch einige Verfahren zur Lösung nichtlinearer Gleichungssysteme auf der Lösung mehrerer LGS basieren (bspw. Newton-Verfahren). Deswegen werden in diesem Kapitel zuerst ein paar grundlegende Eigenschaften von normierten Räumen wiederholt. Anschließend werden einige grundlegende Verfahren zur Lösung linearer Gleichungssysteme vorgestellt werden. Ausgefeiltere Algorithmen, die ebenfalls zur approximativen Lösung linearer Gleichungssysteme verwendet werden können, werden in Kapitel 7 vorgestellt. 2.1. Endlich dimensionale Vektorräume Definition 2.1 (Normierter Raum) Ein Vektorraum V über einen Körper K in Kombination mit einer Funktion k·k : V → R (“Norm”) heißt “normierter Raum“ (V, K, k · k), wenn die folgenden Bedingungen erfüllt sind: 1. kxk ≥ 0 ∀ x ∈ V 2. kxk = 0 ⇔ x = 0 3. kλxk = |λ| · kxk ∀ λ ∈ K, x ∈ V 4. kx + yk ≤ kxk + kyk ∀ x, y ∈ V Aus der vierten Bedingung für die Norm folgt noch eine weitere Ungleichung. kxk = kx − y + yk ≤ kx − yk + kyk ⇒ kxk − kyk ≤ kx − yk kyk = ky − x + xk ≤ ky − xk + kxk ⇒ kyk − kxk ≤ kx − yk 23 2. Grundlagen linearer Gleichungssysteme ⇒ kxk − kyk ≤ kx − yk Beispiel 2.1. Zur Erinnerung sind hier noch einige Beispiele für normierte Räume gegeben, die wohlbekannt sein sollten. • V =K kxk = |x| • V = Kn • V = Kn kxk = kxk∞ = maxj=1...n |xj | P kxk = kxk1 = nj=1 |xj | • V = Kn kxk = kxk2 = P n j=1 |xj |2 21 Die Konvergenz von Folgen ist ein wichtiges Element in der Numerik, beispielsweise für Abbruchbedingungen iterativer Verfahren bei Erreichen einer Konvergenzschranke, und hängt bekanntlich von der Norm ab. (Zur Erinnerung: Eine Folge (x(i) ) wird als konvergent mit Grenzwert x = limi→∞ x(i) bezeichnet, falls limi→∞ kx − x(i) k = 0 gilt.) Die Konvergenz einer Folge ist also im allgemeinen abhängig von der gewählten Norm. Beispiel 2.2. Gegeben sei der Raum C[a,b] der stetigen Funktionen auf dem Intervall [a, b] → R und dazu zwei Normen kf k∞ := sup |f (x)| x∈[a,b] Z kf k2 := b (f (x))2 dx 12 a sowie die Funktionenfolge (fn ), die wie folgt aussieht: 1 fn 0.8 y 0.6 0.4 0.2 0 a a+1/n b x Abbildung 2.1.: graphische Darstellung der zu untersuchenden Folge (fn ) 24 2.1. Endlich dimensionale Vektorräume Offensichtlich ist kfn k∞ = 1 ∀ n und kfn k2 → 0. Bezüglich kf k2 konvergiert die Folge also gegen die Nullfunktion, aber für kf k∞ gibt es keine Funktion f mit kf − fn k∞ → 0, bezüglich dieser Norm ist die Folge also divergent. Glücklicherweise gibt es dieses Problem nur im unendlichdimensionalen Fall, da in endlichdimensionalen Vektorräumen alle Normen äquivalent sind. Definition 2.2 (Äquivalenz von Normen) Seien k · ka und k · kb zwei Normen auf einem Vektorraum V . k · ka wird als äquivalent zu k · kb (k · ka ∼ k · kb ) bezeichnet, falls es zwei Konstanten A, B ≥ 0 gibt mit Akxka ≤ kxkb ≤ Bkxka x∈V Diese Definition einer Äquivalenzrelation erfüllt die nötigen Reflexivitäts-, Transitivitäts- und Symmetrie-Eigenschaften. Beweis. Für die Reflexivität setzt man A, B = 1. Die Symmetrie lässt sich durch zwei einfache Umformungen zeigen. Ak · ka ≤ k · kb ≤ Bk · ka 1 1 k · k b ≤ k · ka ⇒ k · ka ≤ k · k b A B 1 1 ⇒ k · k b ≤ k · ka ≤ k · k b B A Für die Transitivität geht man von k · ka ∼ k · kb und k · ka ∼ k · kc aus. Unter Anwendung der Symmetrie ergibt sich daraus: Ak · ka ≤ k · kb ≤ Bk · ka Ck · kc ≤ k · ka ≤ Dk · kc ⇒ ACk · kc ≤ k · kb ⇒ k · kb ≤ BDk · kc ⇒ ACk · kc ≤ k · kb ≤ BDk · kc Satz 2.1 (Äquivalenz von Normen in endlichdimensionalen Vektorräumen) In einem endlichdimensionalen Vektorraum sind alle Normen äquivalent. Beweis. Alle endlichdimensionalen Vektorräume V (dimV = m < ∞) sind zu einem Rn isomorph. Unter Ausnutzung der Transitivität der Normäquivalenz reicht es also zu zeigen, dass in Rn jede Norm k · k zu k · k1 äquivalent ist. n x∈R ,x= n X xj ~ej xj ∈ R, ~ej Basisvektoren j=1 25 2. Grundlagen linearer Gleichungssysteme ⇒ kxk = k X xj ~ej k ≤ X j ≤ X j |xj | · k~ej k j |xj | max ·k~ek k = B k X |xj | = Bkxk1 j Damit ist die obere Schranke für die Äquivalenz erledigt und es fehlt nur noch die untere Schranke. Wegen kxk − kyk ≤ kx − yk ≤ Bkx − yk1 ist die Abbildung k · k : V → R auf Rn stetig. Deswegen muß das Bild von k · k auf der kompakten Teilmenge S1 = {x ∈ Rn : kxk1 = 1} ebenfalls kompakt sein und es existiert ein z ∈ S1 mit x ∈ S1 ∀ x ∈ Rn gilt, folgt daraus: kzk = inf x∈S1 kxk > 0. Da nun kxk 1 x kxk = kxk1 · kxk1 ≥ kxk1 kzk = Akxk1 Daraus folgt die Äquivalenz k · k ∼ k · k1 . Die Transitivität und Symmetrie stellen dann die Äquivalenz aller Normen auf diesem Vektorraum sicher. In einem endlichdimensionalen Vektorraum folgt also aus der Konvergenz einer Folge bezüglich einer beliebigen Norm die Konvergenz bezüglich aller Normen. Insbesondere konvergiert eine Folge genau dann, wenn ihre einzelnen Komponenten konvergieren. x = lim x(j) ⇔ lim x − x(j) = 0 j→∞ j→∞ ⇔ lim x − x(j) ∞ = 0 j→∞ (j) ⇔ lim xk − xk = 0 ∀ k j→∞ 2.1.1. Normen auf Vektorräumen von Matrizen In den folgenden Abschnitten wird die Norm einer Matrix öfter eine Rolle spielen, weswegen hier ihre Definition und einige wichtige Eigenschaften wiederholt werden sollen. Definition 2.3 (Matrixnorm) Eine Abbildung k · k : Km×n → R heißt Norm auf K m×n (Raum der m × n-Matrizen mit Elementen aus K) wenn die folgenden Bedingungen erfüllt sind: 1. kAk ≥ 0 ∀ A ∈ Km×n 2. kAk = 0 ⇔ A = 0 26 2.1. Endlich dimensionale Vektorräume 3. kλAk = |λ| · kAk ∀ λ ∈ K, x ∈ Km×n ∀ A, B ∈ Km×n 4. kA + Bk ≤ kAk + kBk Die Dimension von Km×n ergibt sich als m · n · dimK. Definition 2.4 (Verträglichkeit von Normen) Sei k · ka eine Norm auf Kn , k · kb eine Norm auf Km und k · kM eine Norm auf Km×n . Dann heißt k · kM verträglich mit k · ka und k · kb , falls gilt: ∀ x ∈ Kn , A ∈ Km×n kAxkb ≤ kAkM · kxka Definition 2.5 (Induzierte Norm) Sei k · k eine Norm auf Kn , dann wird durch kAkM := kAxk = sup kAyk y∈S1 x∈Kn \{0} kxk sup S1 = {x ∈ Kn : kxk = 1} eine Norm auf Kn×n definiert, die mit k·k verträglich ist. Diese Norm wird ”induzierte Norm“ oder auch ”zugehörige Norm“ genannt. Diese induzierte Matrixnorm ist neben der Verträglichkeit mit der dazugehörigen Vektornorm auch submultiplikativ, dass heißt, es gilt: kA · BkM ≤ kAkM · kBkM Beispiel 2.3. Abschließend gibt es noch ein paar Beispiele für induzierte und auch nicht-induzierte Matrixnormen auf Kn×n . • ”maximale Zeilensumme“ kxk∞ = max |xj | j=1...n X kAxk∞ = max ajk xk j=1...n k ! ⇒ kAxk∞ ≤ max j=1...n X |ajk ||xk | k ! ≤ max j=1...n X k |ajk | · max |xk | k 27 2. Grundlagen linearer Gleichungssysteme ! = max X ⇒ Definition: kAk∞ := max X j=1...n |ajk | · kxk∞ k ! j=1...n |ajk | k Die Erfüllung der Normeigenschaften für die soeben hergeleitete ”maximale Zeilensumme“ lässt sich leicht überprüfen und aus der Herleitung ergibt sich auch sofort die Verträglichkeit mit k·k∞ . Desweiteren ist diese Matrixnorm auch von k · k∞ induziert (der Beweis ist eine Übungsaufgabe). • ”maximale Spaltensumme“ kxk1 = n X |xj | j=1 ! X kAxk1 = max |ajk | kAk1 := sup k=1...n kxk1 x j Die Definition von kAk1 ist identisch mit der der induzierten Norm, wie man erkennen kann, wenn man die kartesischen Einheitsvektoren in die Definition der induzierten Norm einsetzt. Da jeder andere Vektor von S1 sich als Linearkombination von diesen (entsprechend skalierten) Vektoren darstellen lässt, ist es offensichtlich, dass es sich hier um die von k · k1 induzierte Matrixnorm handelt. • ”euklidische Norm“ und ”Spektralnorm“ n X kxk2 = kxk2 = ! 12 |xj |2 j=1 kAk2 := kxk2 = n X ! 12 |ajk |2 j,k=1 Die euklidische Matrixnorm ist zwar mit der euklidischen Vektornorm verträglich, aber nicht von dieser induziert. Um dies zu zeigen, betrachtet man die Einheitsmatrix im Kn×n . ! 21 X √ kEk2 = = n δjk k,j sup x 28 √ kExk2 kxk2 = sup = 1 6= n kxk2 x kxk2 2.2. Gaußsches Eliminationsverfahren Die durch die euklidische Vektornorm induzierte Matrixnorm ist die ”Spekp tralnorm“, die als kAks = λmax [A† A] definiert ist. λmax ist hierbei der betragsmäßig größte Eigenwert der Matrix. 2.2. Gaußsches Eliminationsverfahren Eine Möglichkeit zur Lösung von linearen Gleichungssystemen Ax = b mit nichtsingulärer Matrix A bietet das Gaußverfahren. Bei diesem Verfahren wird die Matrix durch elementare Transformationen wie Zeilenvertauschung und Addition zweier Zeilen in die Form einer Dreiecksmatrix gebracht. Als deterministisches Verfahren bietet das Gaußverfahren die Vorteile einen nur von der Dimension des LGS abhängigen Arbeitsaufwand zu haben und keine besonderen Anforderungen an dieses zu stellen um Konvergenz zu gewährleisten. Allerdings hängt der numerische Fehler trotzdem von der Kondition der Matrix ab und kann für schlecht konditionierte Systeme nachträgliche Korrekturen des Ergebnisses erforderlich machen. Ein weiterer Nachteil ist die Laufzeit des Verfahrens, da es mit O(n3 ) skaliert. Ax = b → Rx = c A ∈ Cn×n x, b ∈ Cn r1,1 r1,2 . . . r1,n r2,2 . . . r2,n R= .. .. . . 0 rn,n Das System Rx = c lässt sich dann auf einfache Weise lösen: Zeile n : Zeile j < n : ⇒ xn = rn,n xn = cn rj,j xj + n X cn rn,n rj,k xk = cj k=j+1 Löst man diese Gleichungen nun in absteigender Reihenfolge für j, sind die in der jeweiligen Summe auftauchenden xk bereits bekannt und es ergibt sich als Lösung: " # n X 1 cj − rj,k xk ⇒ xj = rj,j k=j+1 (2.1) 29 2. Grundlagen linearer Gleichungssysteme Beginnt man mit A(0) := A, kann man die einzelnen Gleichungen schrittweise umformen um A in die gewünschte Dreiecksform zu bringen. (0) A = a1,1 a1,2 a2,1 a2,2 .. .. . . an,1 an,2 . . . a1,n . . . a2,n .. .. . . . . . an,n Multipliziert man nun für alle m > 1 die erste Gleichung mit dies von der m-ten Gleichung, erhält man: A (1) = am,1 · a1,1 a1,1 a1,2 ... a1,n a2,1 a1,n 0 a2,2 − a1,1 a1,2 . . . a2,n − aa2,1 1,1 .. .. . .. .. . . . 0 an,2 − an,1 a a1,1 1,2 . . . an,n − an,1 a a1,1 1,n und subtrahiert Nach dem ersten Schritt hat das Gleichungssystem dann die Form, a1,1 a1,2 . . . a1,n 0 .. Ã(1) . 0 b1 x = b̃(1) die exakt wie das Ausgangsproblem in einer Dimension weniger aussieht. Wiederholt man nun dasselbe Verfahren für die Matrix Ã(1) , bringt man die zweite Spalte der Ausgangsmatrix in die notwendige Form für eine Dreiecksmatrix und kann durch Iteration die komplette Matrix umformen. Solange alle ajj 6= 0 sind, funktioniert dieser Algorithmus, ist jedoch ein Diagonal-Element 0, so kann man einfach zwei Zeilen vertauschen um das Problem zu lösen. Ist die Matrix dann in Dreiecksform gebracht, kann man das LGS wie zuvor beschrieben lösen. Algorithmus 2.1 (Gauß-Algorithmus) Gegeben sei ein lineares Gleichungssystem Ax = b mit einer regulären Matrix A ∈ Cn×n und einem Vektor b ∈ Cn . Dieses Gleichungssystem lässt sich mit folgendem Algorithmus in eine Dreiecksform bringen und lösen. Die Erweiterung des Algorithmus mit der Pivot-Elementsuche wird im Anschluss auf Seite 32 erläutert. Im folgenden Pseudocode ist Aj als j-te Zeile der Matrix zu verstehen. 30 2.2. Gaußsches Eliminationsverfahren for i = 1, 2 . . . n − 1 do gegebenenfalls Pivotisierung der i-ten Spalte for j = i + 1, i + 2 . . . n do (i) (i−1) (i−1) Aj = Aj − Ai · aj,i /ai,i (i) (i−1) (i−1) bj = bj − bi · aj,i /ai,i end for end for for i =hn, n − 1, . . . 1 do i P (n−1) (n−1) (n−1) x i = bi − nk=i+1 ai,k xk /ai,i end for Für Matrizen, die die Regularität nicht erfüllen, liefert dieser Algorithmus kein Ergebnis, da x nicht eindeutig bestimmt ist. Im Falle einer singulären Matrix wird eine komplette (Teil-)Spalte 0, womit auch eine Zeilenvertauschung keinen Effekt mehr hat. Die Nachteile dieses Algorithmus sind die kubisch mit der Matrixdimension skalierende Laufzeit und die Fehlerfortpflanzung. Zumindest für das zweite Problem lässt sich durch eine genauere Untersuchung der Transformationen eine Lösung finden. Formal lassen sich diese Umformungen auch als Matrix-Transformationen darstellen: A(1) = G1 P1k A(0) 0 0 0 1 .. . 0 P1 = 1 0 0 .. . ... 0 1 .. 0 .. . . 1 ... 0 b(1) = G1 P1k b(0) 0 ... 0 .. . 1 .. . 0 ... 1 −g21 −g31 G1 = .. . −gn1 1 0 0 ... 0 1 0 ... 0 0 1 .. . .. .. . . 0 0 ... 0 1 31 2. Grundlagen linearer Gleichungssysteme G1 bewirkt die im Algorithmus 2.1 beschriebenen Zeilenadditionen, wobei sich die Matrixelemente gij gemäß dem Algorithmus ergeben. P1 ist die Matrix zur Vertauschung der ersten und der k-ten Zeile und kann zur ”Pivotisierung” des Systems benutzt werden. Das Element, dass nach dem Zeilentausch die oberste Diagonalstelle besetzt, heißt “Pivotelement“. Rein theoretisch kann jedes Matrixelement der ersten Spalte als Pivotlement genutzt werden, eine Fehleranalyse des Algorithmus ergibt jedoch, dass das betragsmäßig größte Element die optimale Wahl darstellt (”Spaltenpivotsuche”). Alternativ dazu ist auch die allgemeinere Form der “Totalpivotsuche“ möglich, bei der das betragsmäßig größte Element der kompletten Matrix an die oberste Diagonalstelle gesetzt wird. Hierfür sind allerdings nicht nur Zeilenvertauschungen, sondern auch Spaltenvertauschungen notwendig. Am Ende der Gauß-Elimination können wir unser Gleichungssystem Ax = b dann wie folgt schreiben: A(n) x = b(n) A(n) = Gn Pn Gn−1 Pn−1 . . . G1 P1 A = SA(0) (2.2) b(n) = Gn Pn Gn−1 Pn−1 . . . G1 P1 b = Sb(0) (2.3) Die einzelnen Matrizen Gj und Pj hängen hierbei nur von von der Ausgangsmatrix A ab, nicht aber von der rechten Seite des Gleichungssystems. Diese Eigenschaft lässt sich nutzen, um die numerischen Fehler durch Nachiterationen zu reduzieren. Angenommen es liegt eine mittels Gauß-Elimination gefundere Näherung x0 des Lösungsvektors x (Ax0 ≈ b) vor. Definiert man den Fehler von x über r0 = b − Ax0 , so ergibt sich mit z0 = x − x0 (mit unbekanntem z0 ): b = Ax = A(x0 + z0 ) = Ax0 + Az0 = (b − r0 ) + Az0 ⇒ Az0 = r0 Da die Matrix in dem neuen LGS dieselbe wie im Ausgangsproblem ist, können wir unsere bereits bekannte Lösungsmatrix S wiederverwenden um das neue Problem mit n2 Kosten in Dreiecksform zu bringen und dann zu lösen. So erhalten wir mit, im Vergleich zur Lösung des Ausgangsproblems, geringem Aufwand die verbesserte Näherung x1 = x0 + z0 . Bei Bedarf kann man auch mehrere Nachiterationen durchführen um das Ergebnis weiter zu verbessern. 32 2.3. Iterative Verfahren zur Lösung von LGS (”Linear Descent“) 2.3. Iterative Verfahren zur Lösung von LGS (”Linear Descent“ Methoden) Das eben vorgestellte Gauß-Verfahren eignet sich aufgrund seiner Skalierung (O(n3 )) und sich fortpflanzender Rundungsfehler nur für Gleichungssysteme mit maximal etwa 100 Unbekannten. Für größere Gleichungssysteme sind iterative Verfahren in der Regel die bessere Wahl. Als einfache Vertreter dieser Klasse von Algorithmen werden wir hier die Jacobi- und die Gauß-Seidel-Verfahren einführen. Der Anschaulichkeit halber werden zwei äquivalente Herleitungen dieser Verfahren gezeigt: einmal mittels eines äquivalenten Minimierungsproblems und einmal mit Hilfe des Banach’schen Fixpunktsatzes. Satz 2.2 (Äquivalenz von LGS und Minimierung (Linear Descent)) Sei ein lineares Gleichungssystem Ax = b mit einer symmetrisch, positiv definiten (s.p.d.) Matrix A ∈ Rn×n gegeben, dann gilt: Ax = b ⇔ x = minn J(v) v∈R 1 mit: J(v) = v T Av − bT v 2 Beweis. Da J eine quadratische Funktion ist, kann sie nur maximal ein Extremum haben und weil A nach Vorraussetzung s.p.d. ist, muss es sich bei diesem um ein Minimum handeln. Betrachten wir also den Gradienten von J(v): J 0 (v, w) = v T Aw − bT w ! J 0 (x, w) = 0 ⇒ 0 = hAx − b, wi ∀ w ∈ Rn ⇒ Ax − b = 0 Um die mit der direkten Lösung des LGS verbundenen Probleme zu umgehen, kann man dieses äquivalente Minimierungsproblem approximativ lösen, indem man es in mehrere kostengünstige Einzelschritte aufteilt. Statt der Minimierung in mehreren Dimensionen gibt man zu Beginn n fixe Suchrichtungen vor und minimiert die Funktion anschließend entlang dieser Geraden. Die einfachste Wahl für die Suchrichtungen sind die kartesischen Einheitsvektoren ei des Rn . Die optimale Schrittweite α∗ entlang der Suchrichtung ei ergibt sich in diesem Fall als: 1 J(x(t) + αei ) = (x(t) + αei )T A(x(t) + αei ) − bT (x(t) + αei ) 2 33 2. Grundlagen linearer Gleichungssysteme d J(x(t) + αei ) = eTi Ax(t) + αeTi Aei − bT ei dα bT ei − eTi Ax(t) ⇒ α∗ = eTi Aei Auf Basis dieser Überlegungen ergeben sich dann zwei verschiedene Verfahren, je nachdem in welcher Reihenfolge die Minimierungen entlang der einzelnen Suchvektoren vorgenommen werden. Bei dem ersten Verfahren, bekannt als Gesamtschrittoder Jacobi-Verfahren, minimiert man vom Startpunkt ausgehend entlang aller Suchrichtungen und geht dann alle Teil-Schritte gleichzeitig. Algorithmus 2.2 (Jacobi-Iteration (Gesamtschrittverfahren)) Gegeben seien ein LGS Ax = b mit symmetrisch, positiv definiter Matrix A ∈ Rn×n , ein Anfangswert x und die kartesischen Einheitsvektoren ei des Rn . Dann lässt sich eine Approximation der Lösung durch folgendes iteratives Verfahren finden. Der Ausdruck T OL steht hierbei für ein geeignetes Konvergenzkriterium, beispielsweise die Norm des Residiums r = Ax(t) − b. 1 J(v) = v T Av − bT v 2 while !T OL do p=0 for i = 1, 2, . . . n do αi∗ = bT ei − eTi Ax(t) / eTi Aei p = p + αi∗ ei end for x=x+p end while Um eine effiziente Berechnung zu ermöglichen, ist es hilfreich diesen Algorithmus in Matrixform zu bringen. Ausgehend von den einzelnen Komponenten ergibt sich für die nächste Iterierte: (t+1) xi ⇒ x(t+1) 34 bT ej − eTi Ax(t) eTi Aei bi (Ax(t) )i (t) = xi − + ai,i ai,i n n X (Ax(t) )i X bi (t) =x − · ei + · ei a a i,i i,i i=1 i=1 (t) = xi + 2.3. Iterative Verfahren zur Lösung von LGS (”Linear Descent“) Führt man nun eine Matrix D ein, die nur die Diagonalelemente von A enthält, dann kann man dieses Gleichungssystem wie folgt umschreiben: x(t+1) = D−1 Dx(t) − D−1 Ax(t) + D−1 b = D−1 (D − A)x(t) + D−1 b Da diese Iterationsvorschrift nur aus Matrix-Vektor-Multiplikationen und Vektoraddition besteht, bei denen die Matrizen konstant sind, skaliert jeder Iterationsschritt mit O(n2 ). Bleibt nun die Anzahl der nötigen Gesamtschritte zum Erreichen des Konvergenzkriteriums deutlich unter n, so ist dieses Verfahren wesentlich günstiger als die Gauß-Elimination. Eine Alternative zu diesem Verfahren ist das sogenannte Einzelschritt- oder GaußSeidel-Verfahren, bei dem die Lösung nach jedem Optimierungsschritt aktualisiert wird statt erst nach dem kompletten Zyklus. Algorithmus 2.3 (Gauß-Seidel-Iteration (Einzelschrittverfahren)) Gegeben seien ein LGS Ax = b mit symmetrisch, positiv definiter Matrix A ∈ Rn×n , ein Anfangswert x und die kartesischen Einheitsvektoren ei des Rn . T OL ist hier wie zuvor ein geignetes Konvergenzkritierum. 1 J(v) = v T Av − bT v 2 while !T OL do for i = 1, 2, . . . n do αi∗ = bT ei − eTi Ax(t) / eTi Aei x = x + αi∗ ei end for end while Auch für die Gauß-Seidel-Iteration lässt sich ausgehend von der Komponentenschreibweise eine Matrixdarstellung für eine effiziente Berechnung finden. Pi−1 ∗ bT ej − eTi A(x(t) + j=1 αj ej ) (t+1) (t) xi = xi + T ei Aei (t) (t+1) n i−1 X X ai,j xj ai,j xj bi (t) − + = xi − ai,i ai,i ai,i j=i j=1 35 2. Grundlagen linearer Gleichungssysteme Mithilfe der zuvor eingeführten Diagonalmatrix D und der strikten oberen und unteren Dreiecksmatrizen R und L von A (nur die Elemente überhalb beziehungsweise unterhalb der Diagonale sind vorhanden) lässt sich auch dieser Ausdruck verschönern. x(t+1) = D−1 Dx(t) − D−1 Lx(t+1) − D−1 (D + R)x(t) + D−1 b (E + D−1 L)x(t+1) = −D−1 Rx(t) + D−1 b ⇒ x(t+1) = (E + D−1 L)−1 −D−1 Rx(t) + D−1 b Beide Verfahren haben ihre spezifischen Vor- und Nachteile, das Jacobi-Verfahren lässt sich einfach parallelisieren, während dies bei Gauß-Seidel nicht ohne weiteres möglich ist. Auf der anderen Seite hat das Gesamtschrittverfahren den Nachteil, dass die Summe der Einzeloptimierungen nicht zwangsläufig zu einer Reduzierung des Funktionswertes in jedem Schritt führt. Gauß-Seidel hingegen stellt sicher, dass der Funktionswert in jedem Einzelschritt kleiner wird oder zumindest gleich bleibt. Alternativ zu der gezeigten Herleitung der beiden Verfahren kann man die Verfahren auch als Fixpunkt-Iterationen gemäß dem Banach’schen Fixpunktsatz5 einführen. Hierzu brauchen wir noch einen Satz über die Konvergenz des Verfahrens der sukzessiven Approximation. Satz 2.3 (Konvergenz der sukzessiven Approximation) Sei B ∈ Rn×n , c ∈ Rn und es sei kBkM < 1 in einer verträglichen Matrixnorm. Dann gibt es genau einen Vektor z ∈ Rn mit z = Bz + c und das Verfahren der sukzessiven Approximation x(t+1) = Bx(t) + c konvergiert gegen jenes z. Beweis. Für die Abbildung g(y) = By + c gilt: kg(x) − g(y)k = kB(x − y)k ≤ kBkM kx − yk Da kBkM < 1 nach Vorraussetzung gilt, ist g(x) eine Kontraktion, nach Satz 6.4 gibt es daher genau einen Fixpunkt z = g(z) und das angegebene Verfahren konvergiert gegen diesen. 5 Dieser Satz kommt erst später in Kapitel 6. 36 2.3. Iterative Verfahren zur Lösung von LGS (”Linear Descent“) Nun können wir unser LGS Ax = b in diese Form bringen und später über die Anforderungen an die Norm von B auch noch für die Konvergenz nötige Bedingungen an die Matrix A finden, die einfacher prüfbar sind als Symmetrie und positive Definitheit. Die einzige Vorraussetzung für die Umfomrungen ist, dass alle Diagonalelemente ungleich 0 sind. Ax = b n X ai,j xj = ai,i xi + X j=1 ai,j xj = bi ∀ i = 1, 2 . . . n j6=i 1 ⇒ xi = ai,i ! bi − X ai,j xj j6=i −1 Dx )) ⇒ x = D (b − (|{z} Ax − |{z} P j P j=i −1 −1 = D (D − A) x + D | {z }b | {z } :=B :=c Damit haben wir das LGS in eine Form gebracht, in der wir das Verfahren der sukzessiven Approximation anwenden können. ! X 1 (t) (t+1) = ai,j xj xi bi − ai,i j6=i x(t+1) = D−1 (D − A)x(t) + D−1 b Die auf diese Weise hergeleitete Iterationsvorschrift entspricht genau der zuvor über den Minimierungsansatz hergeleiteten Ergebnis, aber mit unterschiedlichen Voraussetzungen. Im ersten Falle haben wir eine symmetrische und positiv-definite Matrix gefordert während für die Umformungen in der zweiten Herleitung nur eine nicht-verschwindene Diagonale6 erforderlich ist. Für die Konvergenz muss allerdings zusätzlich noch kBkM < 1 gelten. Da im endlichdimensionalen Fall alle Normen äquivalent sind, reicht es, wenn B diese Bedingung in einer verträglichen Norm erfüllt, ein Nichterfüllen des Kriteriums in einer anderen Norm hat dann keine Auswirkung auf die Konvergenz. Für die üblichen Vektornormen in Rn ergeben sich damit die folgenden Kriterien: X ”starkes Zeilensummenkriterium“ (k·k∞ ) : |ai,i | > |ai,j | ∀ i = 1, 2 . . . n j6=i 6 Eine symmetrisch positiv-definite Matrix muss nicht-verschwindene Diagonal-Elemente haben. Dies kann man mit Hilfe der kartesischen Einheitsvektoren auf einfache Weise zeigen, indem man diese in die Positivitätsbedingung einsetzt. 37 2. Grundlagen linearer Gleichungssysteme ”starkes Spaltensummenkriterium“ (k·k1 ) ”Quadratsummenkriterium“ (k·k2 ) : : X ai,j max ai,i < 1 j=1,2,...n i6=j n X X aj,k 2 j=1 k6=j aj,j < 1 Beispiel 2.4. Eine Matrix, die das Konvergenzkriterium in einer bestimmten Norm erfüllt, muss dieses im endlichdimensionalen Fall nicht für andere Normen erfüllen, wie an folgender Beispielmatrix gezeigt werden soll: 3 1 1 0 13 13 A = 2 3 21 ⇒ −B = 32 0 16 2 1 2 1 4 0 4 4 Diese Matrix erfüllt offensichtlich das starke Zeilensummkriterium, aber nicht das starke Spaltensummenkriterium, weil die erste Spalte die Ungleichung verletzt. Bringt man nun bei der eben gezeigten Herleitung noch den Ansatz mit ein, bereits neu berechnete Komponenten im aktuellen Schritt schon zu berücksichtigen, lässt sich das Gauß-Seidel-Verfahren herleiten.7 Damit das Gauß-Seidel-Verfahren funktioniert, muss die Matrix E + D−1 L invertierbar sein. Dies ist glücklicherweise immer der Fall, da diese Matrix nach Konstruktion eine untere Dreiecksmatriz ist, die auf der Diagonale nur 1 als Einträge hat (L ist eine strikte untere Dreiecksmatrix) und damit det(E + D−1 L) = 1 gilt. Für die Konvergenz des Gauß-Seidel-Verfahrens ist ein schwächeres Kriterium hinreichend als für das Jacobi-Verfahren. Wenn die Matrix A das sogenannte ”schwache Zeilensummenkriterium“ erfüllt, konvergiert die Gauß-Seidel-Iteration. X |ai,j | ≤ |ai,i | ∀ i j6=i Auf einen Beweis wird an dieser Stelle verzichtet und stattdessen auf die Literatur verweisen.[1, Satz 8.2.12] 7 Dies wird hier nicht nochmal gezeigt, da die Herleitung ab der Komponentenschreibweise quasi identisch zum Minimierungsansatz ist. 38 3. Approximative Darstellung von Funktionen Oft steht man vor der Situation eine Sammlung an Messwerten zu haben, die eine Funktion in Abhängigkeit von ihrer Variable darstellen, beispielsweise Ort-ZeitWertepaare aus einem Mechanik-Experiment. Nun stellt sich die Frage, wie man aus diesen einzelnen Punkten den Verlauf der Funktion zwischen dieser approximativ darstellen kann. Dazu sollen in diesem Kapitel einige Verfahren zur Interpolation behandelt werden, die Regressionsrechnung wird zu einem späteren Zeitpunkt behandelt werden. y(x) Stützstellen Interpolation x Abbildung 3.1.: näherungsweise Darstellung einer Funktion auf Basis einer Menge an Stützstellen Gegeben ist im folgenden immer eine Menge an Stützstellen {x0 , x1 . . . xn } und den dazugehörigen Funktionswerten {y0 , y1 . . . yn } einer Funktion f (x) mit f (xi ) = yi . Für die Interpolationsfunktionen ist es elementar, die Funktion an diesen Stützstellen korrekt darzustellen, jede Interpolationsfunktion f˜(x) muss also die Bedingung f˜(xi ) = yi (3.1) 39 3. Approximative Darstellung von Funktionen erfüllen. Es versteht sich von selbst, dass die Menge der Stützstellen die Funktion repräsentativ darstellen muss, um eine vernünftige Approximation zu ermöglichen. Im Folgenden wird immer davon ausgegangen, dass die Sützstellen in aufsteigender Reihenfolge sortiert sind. 3.1. Interpolation mit Polynomen Der naheliegendste Ansatz für die Interpolation ist die Verwendung von einem Polynom als Interpolationsfunktion. Im folgenden sollen nun verschiedene Verfahren zur Bestimmung von Interpolationspolynomen vorgestellt und deren Eigenschaften untersucht werden. 3.1.1. Interpolation mit Lagrange-Polynomen Ein Ansatz zum Erreichen dieses Ziel besteht in der Verwendung der so genannten “Lagrange-Polynome”, die wie folgt definiert sind: Lj (x) = n Y k=0;k6=j x − xk xj − xk (3.2) Wie aus der Definition erkenntlich ist, handelt es sich bei Lj (x) um ein Polynom n-ten Grades, dessen Funktionswerte an den Stützstellen als Kronecker-Delta darstellbar sind. Lj (xi ) = δij (3.3) Diese Eigenschaft lässt sich durch Einsetzen der Stützstellen in die obere Definition sofort zeigen, da für i 6= j einer der Linearfaktoren 0 wird und für i = j sich alle Linearfaktoren mit den Vorfaktoren der jeweiligen Terme im Produkt wegkürzen. Aufgrund dieser Eigenschaft lässt sich aus den Lj (x) ein eindeutiges Interpolationspolynom für f (x) konstruieren: p(x) = n X yj · Lj (x) j=0 3.3 p(xi ) = n X j=0 40 yj · Lj (xi ) 3.1. Interpolation mit Polynomen Satz 3.1 (Eindeutigkeit der Lagrange-Polynome) P Das durch p(x) = nj=0 yj · Lj (x) und Gleichung 3.2 gegebene Interpolationspolynom für eine Verteilung von Stützstellen und deren Funktionswerte ist eindeutig bestimmt. Beweis. Angenommen, es existiert ein Polynom n-ten Grades q(x) 6= p(x), das aber ebenfalls die Interpolationsbedingung 3.1 erfüllt. Dann folgt daraus: ∀i q(xi ) = p(xi ) → q(xi ) − p(xi ) = 0 ∀i Die Polynome q(x) und p(x) sind nach Voraussetzung beide vom Grad n, das Differenzpolynom kann demzufolge nach auch maximal Grad n und eine dem entsprechende Anzahl Nullstellen haben. Die obige Betrachtung zeigt aber, dass alle n + 1 Stützstellen Nullstellen dieses Differenzpolynoms sind. Da diese Aussage nur wahr sein kann, wenn q(x) − p(x) = 0 gilt, ergibt sich ein Widerspruch zur Anfangsannahme und p(x) ist demzufolge eindeutig bestimmt. Beispiel 3.1. Für die folgende Stützstellenverteilung wird das Interpolationspolynom und der approximierte Funktionswert an der Stelle 2 gesucht. 4 xi yi 0 1 1 3 2 3 ? 2 y 3 2 1 Stützpunkte gesuchte Interpolation 0 -1 0 1 x 2 3 4 Abbildung 3.2.: Ein Beispiel für Polynominterpolation mit Lagrange-Polynomen Die einzelnen Lagrange-Polynome ergeben sich dann als: L0 (x) = (x − 1)(x − 3) (0 − 1)(0 − 3) L1 (x) = (x − 0)(x − 3) (1 − 0)(1 − 3) L2 (x) = (x − 0)(x − 1) (3 − 0)(3 − 1) Durch Anwendung der Konstruktionsformel für das Interpolationspolynom ergibt sich die Lösung als: p(x) = 1 · L0 (x) + 3 · L1 (x) + 2 · L2 (x) p(2) = 1 · L0 (2) + 3 · L1 (2) + 2 · L2 (2) 10 p(2) = 3 41 3. Approximative Darstellung von Funktionen In der eben verwendeten Darstellung lassen sich die Lagrange-Polynome zur analytischen Berechnung zwar verwenden, für eine Implementierung mit variabler Anzahl der Stützstellen ist diese Darstellung aber nicht geeignet. Daher stellt sich also die Frage, ob die eben vorgestellte Interpolationsmethode auch anders dargestellt werden kann um eine flexiblere und effektive Auswertung von p(x) zu ermöglichen. 3.1.2. Neville-Algorithmus Eine Möglichkeit zur Flexibilisierung der Interpolation mit Lagrange-Polynomen ist die Verwendung des Neville-Algorithmus, der p(x) durch eine Iteration über Teilmengen der Stützstellen ausdrückt und eine direkte Auswertung an einer Stelle x∗ ermöglicht. Satz 3.2 (Iterationsschema des Neville-Algorithmus) Für eine Index-Teilmenge {i0 , i1 . . . il } ⊆ {0, 1, . . . n} sei pi0 ,i1 ...il (x) das Interpolationspolynom, dass auf den dazugehörigen Stützstellen und Funktionswerten basiert. p0,1,...n ist dann natürlich das ursprüngliche Interpolationspolynom. Ausserdem ist für alle Stützstellen pi0 (x) = yi0 . Dann lässt sich p(x∗ ) über das folgende Verfahren schrittweise berechnen. p0...n (x∗ ) ↑ ∗ p0...n−1 (x ) .. . ↑ - p0,1,2 (x∗ ) ↑ p0,1 (x∗ ) ↑ p0 (x∗ ) - p1...n (x∗ ) .. . .. ↑ - p1,2,3 (x∗ ) ↑ p1,2 (x∗ ) ↑ p1 (x∗ ) . - ↑ p2,3,4 (x∗ ) ↑ p2,3 (x∗ ) ↑ p2 (x∗ ) ... ... ... pn−1,n (x∗ ) ↑ pn−1 (x∗ ) pn (x∗ ) Hierbei sind die Zwischenergebnisse definiert als: 1 [(x − xj+l ) · pj...j+l−1 (x) + (xj − x) · pj+1...j+l (x)] xj − xj+l pj (x) = yj pj...j+l (x) = Beweis. Zum Beweis des obigen Verfahren zur iterativen Bestimmung von p(x∗ ) reicht es zu zeigen, dass die verschiedenen pj...j+l (x) die Interpolationsbedingung 3.1 erfüllen, 42 3.1. Interpolation mit Polynomen da in Satz 3.1 bereits gezeigt wurde, dass es nur ein Polynom des Grades n + 1 geben kann, dass 3.1 für n + 1 Stützstellen erfüllt. Der Induktionsanfang ergibt sich direkt aus der Definition der pj . zu zeigen: Induktionsvorraussetzung (IV): pj...j+l (xi ) = yi ∀ i ∈ {j . . . j + l} pj...j+l−1 (xi ) = yi ∀ i ∈ {j . . . j + l − 1} pj+1...j+l (xi ) = yi ∀ i ∈ {j + 1 . . . j + l} Für die Induktion unterteilt man den Induktionsschritt in drei Teilfälle: zunächst die beiden Grenzfälle i = j sowie i = j + l und dann die restlichen i ∈ {j + 1 . . . j + l − 1}: i ∈ {j + 1 . . . j + l − 1} 1 [(xi − xj+l ) · pj...j+l−1 (xi ) + (xj − xi ) · pj+1...j+l (xi )] pj...j+l (xi ) = xj − xj+l 1 IV = [(xi − xj+l ) · yi + (xj − xi ) · yi ] xj − xj+l = yi Fall 1: Fall 2: i=j 1 pj...j+l (xj ) = [(xj − xj+l ) · pj...j+l−1 (xj ) + (xj − xj ) · pj+1...j+l (xj )] xj − xj+l 1 IV = (xj − xj+l ) · yj xj − xj+l = yj Fall 3: i=j+l (xj − xj+l ) (xj+l − xj+l ) · pj...j+l−1 (xj+l ) + · pj+1...j+l (xj+l ) pj...j+l (xj+l ) = xj − xj+l xj − xj+l 1 IV = (xj − xj+l ) · yj+l xj − xj+l = yj Auf der Grundlage von diesem Iterationsschema für die Auswertung von Lagrangepolynomen ohne diese explizit auszurechnen, können wir nun den Neville-Algorithmus formulieren. Algorithmus 3.1 (Neville-Algorithmus) Für eine Menge an Stützstellen {x0 , x1 . . . xn } mit den Funktionswerten {y0 , y1 . . . yn } lässt sich das Lagrange-Interpolationspolynom an der Stelle x∗ mit folgendem Algorithmus direkt auswerten. 43 3. Approximative Darstellung von Funktionen for i = 0, 1 . . . n do pi = y i end for for j = 1, 2 . . . n do for i = 0, 1 . . . n − j do pi = [(x∗ − xi+j ) · pi + (xi − x∗ ) · pi+1 ] / [xi − xi+j ] end for end for Beispiel 3.2. Zur Veranschaulichung des Neville-Algorithmus wird dieser nun mit den Werten aus Beispiel 3.1 durchgeführt. x=2 p0,1 (2) = = p1,2 (2) = p0,1,2 (2) = p0 (x) = y0 = 1 p1 (x) = 3 p2 (x) = 2 1 [(2 − x1 ) · p0 (2) + (x0 − 2) · p1 2] x0 − x1 1 [(2 − 1) · 1 + (0 − 2) · 3] = 5 0−1 1 5 [(2 − 3) · p1 (2) + (1 − 2) · p2 2] = 1−3 2 10 1 [(2 − 3) · p0,1 (2) + (0 − 2) · p1,2 2] = 0−3 3 Der hier vorgestellte Algorithmus ist also in der Lage den Wert einer Funktion an einer gegebenen Stelle direkt auf iterative Weise aus den Stützstellen zu interpolieren. Allerdings muss für jeden auszuwertenden Punkt der komplette Algorithmus von vorne durchlaufen werden. Hierdurch wird der Algorithmus ineffektiv, wenn viele Punkte berechnet werden sollen (beispielsweise für eine grafische Darstellung der Interpolation). 3.1.3. Newtondarstellung, Horner-Schema und dividierte Differenzen Um den zuvor angemerkten Nachteil des Neville-Algorithmus zu vermeiden, ist es vorteilhaft das Interpolationspolynom in der Newton-Darstellung zu schreiben. p(x) = a0 + a1 (x − x0 ) + a2 (x − x0 )(x − x1 ) + . . . +an (x − x0 )(x − x1 ) . . . (x − xn−2 )(x − xn−1 ) 44 3.1. Interpolation mit Polynomen In dieser Darstellung lassen sich die Koeffizienten auf einfache Weise schrittweise bestimmen. Setzt man die n Stützstellen und ihre Funktionswerte gemäß der Interpolationsbedingung in die Newton-Darstellung ein, ergibt sich ein lineares Gleichungssystem mit den Koeffizienten als Lösungsvektor, dessen Matrix eine untere Dreiecksmatrix ist und somit sukzessive gelöst werden kann. x = x 0 → a0 = y 0 x = x1 → a0 + a1 (x1 − x0 ) = y1 x = x2 → a0 + a1 (x2 − x0 ) + a2 (x1 − x0 )(x2 − x0 ) = y2 Aufgrund der zuvor bewiesenen Eindeutigkeit des Interpolationspolynoms bedarf es keinen gesonderten Beweises um zu verifizieren, dass die alternative Darstellung identisch mit der vorherigen ist. Hat man die Koeffizienten der Newton-Darstellung einmal bestimmt, kann man die Funktion dann effizient mit dem Hornerschema auswerten. p(x) = [. . . [[an (x − xn−1 ) + an−1 ](x − xn−2 ) + an−2 ](x − xn−3 ) . . . + a0 ] Um die Koeffizienten {ai } zu bestimmen, gibt es aber noch ein effizienteres Verfahren als das oben erwähnte Gleichungssystem direkt zu lösen. Aufgrund der Problemstruktur sind die Einträge der Matrix im Gleichungssystem nicht voneinander unabhängig. Nutzt man diese Zusammenhänge aus, ergibt sich das Verfahren der “dividierten Differenzen”, das mit weniger Rechenschritten auskommt und somit eine effizientere Lösung darstellt. Satz 3.3 (Rekursionsvorschrift der dividierten Differenzen) Die in der Newton-Darstellung verwendeten Koeffizienten ai des Interpolationspolynoms lassen sich für eine gegebene Verteilung von Stützstellen über folgendes Schema iterativ bestimmen: t0 = y0 ↓ t0,1 = . t0 −t1 x0 −x1 ↓ t1 = y1 ↓ t1,2 = ↓ −t1,2 t0,1,2 = t0,1 x0 −x2 ↓ .. . . ... ↓ ... ↓ . ... . . .. tn = yn . .. t1 −t2 x1 −x2 . t0...n = . t2 = y2 ↓ . ... t0...n−1 −t1...n x0 −xn 45 3. Approximative Darstellung von Funktionen Hierbei sind die t0...l die gesuchten Koeffizienten al und die t sind wie folgt definiert: tj = pj (x) = yj tj...j+l−1 − tj+1...j+l tj...j+l = xj − xj+l Beweis. Wie aus dem Beweis des Neville-Algorithmus (3.2) bekannt ist, ist das über die dort angegebene Formel konstruierte Polynom p0...n = p(x). Der Zusammenhang der Koeffizienten der Newtondarstellung al zu den sich in den Zwischenschritten von Neville ergebenden Polynomen8 ist: al = 1 dl p0...l (x) l! dxl Um nun zu zeigen, dass sich die Koeffizienten über das oben gezeigte Schema bestimmen lassen, nehmen wir an, dass t0...l = al gilt, und stellen daraus folgend die Behauptung auf: 1 dl pj...j+l (x) l! dxl 1 dl 1 = [(x − xj+l ) · pj...j+l−1 (x) + (xj − x) · pj+1...j+l (x)] l! dxl xj − xj+l tj...j+l = Für den Induktionsanfang l = 0 ist diese Aussage offensichtlich wahr und es bleibt nur der Induktionsschluss zu zeigen. Durch Verwendung der Produktregel kann dieser Term auch wie folgt ausgedrückt werden: l X dl l (k) (f (x) · g(x)) = f (x) · g (l−k) (x) l dx k k=0 l k X 1 l d d(l−k) (x − x ) pj...j+l−1 (x) ⇒ tj...j+l = j+l l!(xj − xj+l ) k=0 k dxk dx(l−k) dk d(l−k) + k (xj − x) (l−k) pj+1...j+l (x) dx dx Schaut man nun genauer hin, stellt man fest, dass alle Terme für k > 1 wegfallen, da die erste Ableitung in beiden Summanden 0 wird. Berücksichtigt man außerdem, 8 Zum Beweis bedenke man, dass die Newton-Darstellung iterativ aufgebaut wird und betrachte das das Polynom nur bis al . Dann ergibst sich al als l-te Ableitung davon, geteilt durch l! um die Vorfaktoren aus der Ableitung auszugleichen. Da p0...l (x) aufgrund der Verwendung derselben Stützstellen eine dazu identische Darstellung ist, gilt der angegebene Zusammenhang. 46 3.1. Interpolation mit Polynomen dass pj...j+l−1 und pj+1...j+l vom Grade l − 1 sind, so bliebt nur der Term für k = 1 übrig: l l d 1 pj...j+l−1 (x) − pj+1...j+l (x) = l!(xj − xj+l ) 1 dxl Durch das Ausdrücken des Binominialkoeffizienten über Fakultäten und Einsetzen der Definition der tj...j+l gemäß der Induktionsvoraussetzung man schließlich zu: = 1 [tj...j+l−1 − tj+1...j+l ] (xj − xj+l ) Damit ist also einen Zusammenhang zwischen den al und den t0...l hergestellt und eine funktionierende Rekursionsvorschrift, die das zuvor angegebene Schema rechtfertigt, hergeleitet. Nachdem wir nun die Gültigkeit der Rekursionsvorschrift bewiesen haben, können wir auch den dazugehörigen Algorithmus formulieren, um die Koeffizienten unseres Interpolationspolynoms effizient auszurechnen. Algorithmus 3.2 (Dividierte Differenzen) Gegeben seien n + 1 Stützstellen {x0 , x1 . . . xn } mit den dazugehörigen Funktionswerten yi . Dann lassen sich die Koeffizienten ai des Interpolationspolynoms in der Newtondarstellung mit folgendem Algorithmus bestimmen. for i = 0, 1 . . . n do ti = yi end for a0 = t0 for j = 1, 2 . . . n do for i = 0, 1 . . . n − j do ti = [pi − pi+1 ] / [xi − xi+j ] end for aj = t0 end for Nun mag die Frage aufkommen, ob diese Index-Spielerei grade wirklich notwendig war. Die Antwort darauf ist ein klares Ja, denn ein Vergleich mit dem sukzessiven Lösen des linearen Gleichungssystems zeigt, dass hier deutlich weniger Rechenoperationen durchgeführt werden müssen um die Koeffizienten zu bestimmen. 47 3. Approximative Darstellung von Funktionen 3.1.4. Mögliche Probleme: Extrapolation und Runges Phänomen Mit den zuvor konstruierten Polynomen ist es möglich eine Funktion zwischen den vorhandenen Stützstellen meist vernünftig zu approximieren (ein mögliches Problem wird in diesem Abschnitt noch vorgestellt), aber wie verhält es sich mit der Güte der Annäherung jenseits des Stützstellen-Intervalls? y Stützstellen Interpolation Extrapolationsbereich Interpolationsbereich x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x Abbildung 3.3.: Interpolations- und Extrapolationsbereiche Da es sich bei p(x) um ein Polynom handelt, dessen Grad linear von der Anzahl der Stützstellen abhängt, ist dieser für eine repräsentative Stützstellenmenge hoch. Dies führt dazu, dass das Polynom abseits des Interpolationsintervalls, wo es keine Randbedingungen mehr beschränken, sehr schnell gegen ±∞ strebt. Die bisher konstruierten Interpolationsfunktionen sind also absolut nicht für Extrapolationen geeignet, wie sich durch eine Analyse des Restglieds r(x) auch formal beweisen lässt. r(x) = f (x) − p(x) η 6= xi ∀ i r(η) α = Qn i=0 (η − xi ) x0 < η < x n Definition: Um eine genauere Abschätzung der Größe von r(x) zu ermöglichen, definiert man außerdem eine Hilfsfunktion F (x) wie folgt: n Y F (x) = r(x) − α (x − xi ) i=0 48 3.1. Interpolation mit Polynomen y Stützstellen f(x) p(x) x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x Abbildung 3.4.: Verhalten der Interpolationsfunktion außerhalb des Interpolationsintervalls Wie sich sofort erkennen lässt, hat F (x) im Intervall der Stützstellen mindestens n+2 Nullstellen, nämlich alle n+1 Stützstellen und zuvor gewähltes η. Betrachtet man die Ableitungen von F (x), sieht man, dass die (n + 1)-te Ableitung von F (x) mindestens eine Nullstelle ξ im Intervall [x0 , xn ] hat. F (n+1) (ξ) = 0 9 = f (n+1) (ξ) − p(n+1) (ξ) − α(n + 1)! f (n+1) (ξ) ⇒α = (n + 1)! Mit der ursprünglichen Definition von α kann man nun die Größe des Restglieds, ausgewertet an der Stelle η, bestimmen. α= f (n+1) (ξ) r(η) = Qn (n + 1)! i=0 (η − xi ) n f (n+1) (ξ) Y ⇒ r(η) = · (η − xi ) (n + 1)! i=0 Den maximalen Fehler der Interpolation kann man nun als obere Grenze des Restgliedes im Interpolationsintervall abschätzen. (n+1) Y n f (ξ) |f (η) − p(η)| ≤ max |η − xi | ξ∈[x0 ,xn ] (n + 1)! i=0 9 (n+1) p (ξ) entfällt, da p nur Grad n hat. 49 3. Approximative Darstellung von Funktionen Der Faktor (n + 1)! führt in der Regel dazu, dass der Interpolationsfehler zwischen den Stützstellen klein bleibt. Deswegen werden mehr Stützstellen meistens zu einer höheren Genauigkeit der Approximation führen. Setzt man aber in die Formel ein η ∈ / [x0 , xn ] ein, um zumindest das qualitative Verhalten außerhalb des Interpolationsbereichs zu beurteilen, sieht man, dass das Produkt sehr schnell sehr groß werden und die Fakultät dominieren kann. Jedoch kann es aufgrund der hohen Ordnung des Polynoms auch im Interpolationsintervall zu Abweichungen durch Oszillationen kommen. Dieses Verhalten ist als y Stützstellen f(x) p(x) x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x Abbildung 3.5.: Runges Phänomen bei der Polynominterpolation “Runges Phänomen” bekannt und kann bereits ab 5-8 Stützstellen auftreten. Sind die Ableitungen der zu interpolierenden Funktion bekannt, kann man statt LagrangePolynomen auch Hermitesche Interpolationspolynome verwenden um diesen Effekt zu vermeiden. Für eine Menge von n+1 Stützstellen, bei der die Funktionswerte und die ersten K −1 Ableitungen bekannt sind (also insgesamt (n+1)·K Stützwerte) lässt sich das Interpolationspolynom völlig analog zu dem Lagrange-Interpolationspolynom konstruieren. Hierfür wird nur die Interpolationsbedingung auf die Ableitungen erweitert, dk p(xi ) = f (k) (xi ) k dx 0≤k ≤K −1 0≤i≤n der Eindeutigkeitsbeweis und die Algorithmen verlaufen analog zu denen unter Verwendung von Lagrange-Polynomen (Teilabschnitt 3.1.1). Meist sind diese Ableitungen jedoch aufwändig zu berechnen oder garnicht bekannt, weil der Datensatz beispielsweise aus einem Experiment stammt. In diesen Fällen bietet sich die Spline-Interpolation als Alternative an. Bei dieser wird f (x) auf jedem Teilintervall zwischen 2 Stützstellen durch ein Polynom geringer Ordnung interpo- 50 3.2. Interpolation mit rationalen Funktionen liert und die einzelnen Polynome über Stetigkeitsbedingungen verknüpft. Auf diese Interpolationsmethode wird in Abschnitt 3.3 detailliert eingegangen. 3.2. Interpolation mit rationalen Funktionen Interpolation mit gewöhnlichen Polynomen ist nicht immer ein geeigneter Ansatz, Funktionen mit Polstellen lassen sich beispielsweise damit nicht gut darstellen. Unabhängig von der Zahl der verwendeten Stützstellen wird ein Polynom aufgrund seiner stetigen Differenzierbarkeit nie in der Lage sein, eine Polstelle abzubilden. 10 f(x) Stützstellen Interpolation y 5 0 -5 -10 -2 -1 0 x 1 2 Abbildung 3.6.: Interpolationsfehler an einer Polstelle mit Polynom-Interpolation Sofern es bekannt ist, dass f (x) eine oder mehrere Polstellen hat, liegt es nahe statt eines normalen Polynoms eine rationale Funktion Φ zum Interpolieren zu verwenden. Φ(x) = p(x) a0 + a1 x + . . . + an x n = q(x) b0 + b1 x + . . . + bn x m Dieser Ansatz bietet neben der Möglichkeit Polstellen durch die Nullstellen von q(x) darzustellen auch eine einfache Möglichkeit bereits vorhandenes Wissen übe eine kfache Polstelle xp von f (x) direkt in die Lösung einfließen zu lassen. q(x) = (x − xp )k · (b0 + b1 x + . . . + bn xm ) Die Grade m, n der beiden Polynome kann man über den meist bekannten algebraischen Abfall10 der Funktion so bestimmen, dass das asymptotische Verhalten bei der Interpolation erhalten bleibt: x → ∞ ⇒ f (x) ∝ 10 1 xl Wenn die Funktion nicht im Unendlichen verfällt, funktioniert das natürlich auch andersherum mit xl 51 3. Approximative Darstellung von Funktionen ⇒ m−n = l Die Problemstellung ist natürlich wie immer, die Koeffizienten ai und bi so zu bestimmen, dass alle Stützwerte von der Interpolationsfunktion reproduziert werden. ∀ k = 0, 1, . . . m + n Φ(xk ) = f (xk ) (3.4) Im Gegensatz zu den Lagrange-Polynomen sind rationale Interpolationsfunktionen nicht eindeutig bestimmt, sondern können sich um einen gemeinsamen Faktor der Koeffizienten unterscheiden. Deswegen reichen für m + n + 2 Koeffizienten m + n + 1 Stützstellen aus, um die Interpolationsbedingung zu formulieren. In der praktischen Anwendung muss man also das lineare Gleichungssystem, dass sich aus den Interpolationsbedingungen 3.4 ergibt lösen, um den Lösungsvekor der Koeffizienten zu erhalten. Beispiel 3.3. Gegeben ist die folgende Stützstellen-Verteilung: k xk fk 0 0 1 1 1 2 2 2 2 Da 3 Stützstellen vorhanden sind, liegt es nahe m = n = 1 zu wählen und die Interpolationsbedingugen sehen dann wie folgt aus: 0 = a0 + a1 xk − fk · (b0 + b1 xk ) ⇒k=0: k = 0, 1, 2 0 = a0 + 0 − 1(b0 + 0) ⇒ a0 = b0 k=1: 0 = a0 + a1 − 2(a0 + b1 ) ⇒ 0 = −a0 + a1 − 2b1 (I) k=2: 0 = a0 + 2a1 − 2(a0 + 2b1 ) ⇒ 0 = −a0 + 2a1 − 4b1 (II) (II) − (I) 0 = a1 − 2b1 ⇒ a1 = 2b1 (I) ⇒ 0 = −a0 + 2b1 − 2b1 ⇒ a0 = b0 = 0 Da für den letzten Koeffizienten wegen dem gemeinsamen Faktor keine eindeutige Bedingung mehr existiert, kann b1 nun frei gewählt werden als 1, womit sich a1 = 2 ergibt. Φ(x) = 0 + 2x =2 0+x Wie sich erkennen lässt, verfehlt die gerade konstruierte Interpolationsfunktion aber den ersten Stützpunkt. Eine Interpolation rationalen Funktionen ist also nicht immer eindeutig möglich. 52 3.3. Kubische Spline-Interpolation Die Ursache für die im Beispiel gezeigte Nichtlösbarkeit des Interpolationsproblems mit einer rationalen Funktion liegt in der nicht eindeutigen Darstellung von rationalen Funktionen: p(x)r(x) p̃(x) p(x) = = Φ(x) = q(x) q(x)r(x) q̃(x) Im obigen Beispiel war r(x) = x, wodurch der Grad der beiden Polynome, die Φ laut der Lösung des linearen Gleichungssystems bestimmen, in ihrer teilerfremden Darstellung geringer ist, als ursprünglich bei der Formulierung des Problems vorausgesetzt wurde. Satz 3.4 (Lösbarkeit von rationalen Interpolationsproblemen) Liefert das lineare Gleichungssystem p(xk )−fk ·q(xk ) = 0 einen Satz an Koeffizienten, die zu zwei Polynomen p(x) und q(x) gehören, die teilerfremd sind, ist das rationale Interpolationsproblem lösbar und alle Stützpunkte werden von der Interpolationsfunktion erreicht. Beweis. Sei (a0 , . . . an , b0 , . . . bn ) 6= (0 . . . 0) eine Lösung des LGS p(xk ) − fk · q(xk ) = 0 und die damit definierten Polynome teilerfremd. Dann kann für jedes k ∈ {0, . . . , n + m} einer von zwei Fällen eintreten: Fall 1: q(xk ) 6= 0 ⇒ Φ(xk ) = fk = f (xk ) Fall 2: q(xk ) = 0 ⇒ p(xk ) = 0 Im ersten Fall wird die Stützstelle von der Interpolationsfunktion erreicht, im zweiten Falle jedoch ergibt sich ein Widerspruch. Denn wenn p und q beide eine Nullstelle bei xk haben kann diese als Linearfaktor ausgeklammert werden, was zum Widerspruch zur angenommen Teilerfremdheit steht. Aus dem Beispiel 3.3 ist aber auch erkenntlich, dass sich Situationen in denen die beiden Polynome nicht teilerfremd sind, auf eine einfache Weise durch eine kleine Abänderung der Stützstellen verhindern. In der Praxis tritt dieser Fall aber eher selten auf. Die Berechnung der Koeffizienten kann analog zu den für Lagrange-Polynome gezeigten Algorithmen durchgeführt werden. 3.3. Kubische Spline-Interpolation Die zuvor konstruierten Lagrange-Interpolationspolynome neigen bei der Verwendung vieler Stützstellen, die in der Regel für eine hohe Genauigkeit nötig sind, zu Oszillationen. Die Hermiteschen Interpolationspolynome hingegen erfordern die Kenntnis 53 3. Approximative Darstellung von Funktionen der Ableitungen an den Stützstellen. Beides sind keine erwünschten Eigenschaften, weswegen es nahe liegt, nach alternativen Verfahren zur Interpolation zu suchen. Die Lösung ist die “Spline-Interpolation”, bei der die Interpolationsfunktion über das Intervall gestückelt wird. Zwischen jeweils zwei Stützstellen wird die Funktion über ein Polynom geringer Ordnung approximiert und über Stetigkeitsbedingungen der Ableitungen an die Interpolation im vorangegangenen und folgenden Teilintervall gekoppelt. Spline-Interpolation kann man im Allgemeinen mit Polynomen jeder Ordnung durchführen, am meisten verbreitet sind aber lineare Spline-Interpolation und die kubische Variante. Da die lineare Spline-Interpolation im Endeffekt nur das Verbinden der einzelnen Punkte durch Geraden ist, wird auf diese hier nicht weiter eingegangen11 . Stattdessen soll die kubische Spline-Interpolation im Detail erläutert werden. Definition 3.1 (kubische Spline-Funktion) Für das Intervall [x0 , xn ] nennt man S : [x0 , xn ] → R eine “kubische Spline-Funktion”, wenn sie die Interpolationsbedingungen S(xj ) = yj erfüllt, S(x) ∈ C 2 und S(x) auf jedem Intervall [xj ; xj+1 ] ∀ j = 0, 1, . . . n − 1 ein Polynom 3-ten Grades ist. Um die Eindeutigkeit der Funktion zu garantieren, fordert man außerdem, dass S 00 (x0 ) = S 00 (xn ) = 0. Satz 3.5 (Eindeutigkeit und Oszillationsverhalten kubischer Splines) Eine Spline-Funktion S(x) (wie in Definition 3.1) für eine Funktion f (x) auf einem Intervall [x0 , xn ] ist eindeutig definiert und weist für die gegebene Verteilung der Stützstellen ein Oszillationsverhalten, das nicht stärker als das der Funktion selbst ist, auf. Beweis. Sei f (x) ∈ C 2 auf [x0 , xn ], dann ist Z x1 ||f || = 00 2 21 |f (x)| dx x0 eine Halbnorm12 auf diesem Intervall. Für eine Funktion f (x) und die dazugehörige Spline-Funktion S(x) gilt dann: Z xn 2 ||f − S|| = |f 00 (x) − S 00 (x)|2 dx x0 Z xn 2 2 = ||f || + ||S|| − 2 f 00 (x)S 00 (x)dx x0 11 12 Stetigkeitsbedingungen gibt es hier natürlich nur für die 0-te Ableitung der Funktion da es nichttriviale Funktionen mit ||f (x)|| = 0 gibt, bspw. alle linearen Funktionen 54 3.3. Kubische Spline-Interpolation 2 2 Z xn 00 Z 00 xn [f (x) − S (x)]S (x)dx − 2 = ||f || + ||S|| − 2 = ||f ||2 − ||S||2 − 2 00 x0 n−1 X Z xj+1 j=0 |S 00 (x)|2 dx x0 [f 00 (x) − S 00 (x)]S 00 (x)dx xj Der letzte Term ergibt sich durch eine doppelte partielle Integration zu folgendem Ausdruck: n−1 Z xj+1 n−1 X X x− x 00 00 00 [f (x) − S (x)]S (x)dx = (f 0 − S 0 )S 00 |xjj+1 − (f − S)S 000 |xj+1 + j=0 xj j j=0 Z xj+1 + # (f − S)S 0000 dx xj Weil die dritte Ableitung der Splines an den Stützstellen nicht stetig sein muss, ist es hier jeweils nötig die links- bzw. rechtsseitigen Grenzwerte zu verwenden. Das letzte Integral fällt weg, weil S ein Polynom dritten Grades ist. Aufgrund der Stetigkeit von f 0 , S 0 und f 00 bleiben bei der ersten Summe nur die Randpunkte erhalten. n−1 Z X j=0 xj+1 xj x x− [f 00 (x) − S 00 (x)]S 00 (x)dx = (f 0 − S 0 )S 00 |xn0 − (f − S)S 000 |x+j+1 j Da für die Spline-Funktion aber S(x0 ) = S(xn ) = 0 gilt, entfällt der erste Term und aufgrund der Interpolationsbedingungen f (xj ) = S(xj ) liefert der zweite Term ebenfalls keinen Beitrag. Insgesamt bedeutet dies also: ||f − S||2 = ||f ||2 − ||S||2 (≥ 0) (3.5) Dieses Resultat ist eine wichtige Eigenschaft von Spline-Funktionen: für jedes beliebige, zweifach differenzierbare f ist das Oszillationsverhalten des dazugehörigen Splines maximal genauso groß wie das von f selber. Im Gegensatz zu den zuvor vorgestellten Verfahren, kann Runges Phänomen hier also nicht auftreten. Außerdem lässt sich mit Gleichung 3.5 auch die Eindeutigkeit des Splines beweisen. Hierzu sei angenommen, dass es für dieselbe Funktion und Stützstellenverteilung eine weitere Spline-Funktion T (x) 6= S(x) gibt. Dann ist S auch eine Spline-Interpolation für T , da diese aufgrund der Interpolationsbedinungen an den Stützstellen dieselben Funktionswerte wie f hat. Selbiges gilt aber auch für S, weswegen T also auch eine Spline-Funktion von S sein muss. Folglich muss gelten: ||T (x) − S(x)||2 = ||T ||2 − ||S||2 ≥ 0 ||S(x) − T (x)||2 = ||S||2 − ||T ||2 ≥ 0 55 3. Approximative Darstellung von Funktionen ⇒ 0 = ||S(x) − T (x)||2 Z xn |S 00 − T 00 |2 = x0 ⇒ S 00 (x) = T 00 (x) ∀x ∈ [x0 , xn ] ! Durch Integration ergibt sich dann S(x) = T (x) + cx + d und die Randbedingungen S(x0 ) = T (x0 ) und S(xn ) = T (xn ) führen zu c = d = 0 und damit zu S(x) = T (x), was im Widerspruch zur Annahme steht. Um die Koeffizienten der Spline-Funktion zu bestimmen, ist es hilfreich, die Splinefunktion zuerst über die Abstände der Stützstellen hj+1 := xj+1 −xj und die Momente mj := S 00 (xj ) auszudrücken. Da S ein Polynom 3-ten Grades ist, ist S 00 eine lineare Funktion auf jedem Teilintervall [xj , xj+1 ], die aufgrund der Stetigkeitsbedingungen wie folgt aussieht: x − xj xj+1 − x + mj+1 hj+1 hj+1 2 (xj+1 − x) (x − xj )2 ⇒ S 0 (x) = −mj + mj+1 + Aj 2hj+1 2hj+1 (xj+1 − x)3 (x − xj )3 ⇒ S(x) = mj + mj+1 + Aj (x − xj ) + Bj 6hj+1 6hj+1 S 00 (x) = mj (3.6) (3.7) Durch Einsetzen der Interpolationsbedingungen S(xj ) = yj und S(xj+1 ) = yj+1 in Gleichung 3.7 ergibt sich dann für die beiden unbekannten Integrationskonstanten Aj , Bj das LGS (xj+1 − xj )3 + Bj (I) 6hj+1 (xj+1 − xj )3 + Aj (xj+1 − xj ) + Bj = mj+1 6hj+1 h2j+1 = yj − mj 6 yj+1 − yj hj+1 = − (mj+1 − mj ) . hj+1 6 yj = mj yj+1 (I) ⇒ Bj (II) − (I) ⇒ Aj (II) Nun, da die Integrationskonstanten bestimmt sind, kann S(x) in der folgenden Form geschrieben werden, wobei sich die Koeffizienten direkt aus den eben bestimmten Formeln ergeben. (j) (j) (j) (j) S(x) = a0 + a1 (x − xj ) + a2 (x − xj )2 + a3 (x − xj )3 (j) a0 56 = yj 3.3. Kubische Spline-Interpolation (j) a1 (j) a2 (j) a3 2mj + mj+1 yj+1 − yj − hj+1 hj+1 6 mj = 2 mj+1 − mj = 6hj+1 = Nun verbleibt also noch die Berechnung der Momente, die über die Verknüpfung der Gleichung 3.6 mit den zuvor bestimmten Integrationskonstanten und den Stetigkeits0 − 0 + bedingungen S 0 (x+ j ) = S (xj ) erfolgt. S (xj ) ist der Spline auf dem Intervall [xj , xj+1 ] und S 0 (x− j ) der im Intervall [xj−1 , xj ]. hj+1 (x − xj )2 yj+1 − yj (xj+1 − x)2 + mj+1 + − (mj+1 − mj ) S (x) = −mj 2hj+1 2hj+1 hj+1 6 hj+1 yj+1 − yj hj+1 S 0 (x+ − mj+1 + j ) = −mj 3 6 hj+1 h h y − y j j j j−1 S 0 (x− + mj−1 + j ) = mj 3 6 hj 0 Damit ergibt sich für jeden Stützpunkt (ausgenommen die beiden Randpunkte) eine Gleichung, die zusammen ein LGS aus n − 1 Gleichungen ergeben. 0 − S 0 (x+ j ) = S (xj ) hj+1 hj+1 yj+1 − yj hj yj − yj−1 hj ⇒ −mj − mj+1 + = mj + mj−1 + 3 6 hj+1 3 6 hj Zwei weitere Bedingungen für die n + 1 Momente des Splines ergeben sich aus Definition 3.1: m0 = mn = 0. Durch Definition von ein paar Hilfsvariablen lässt sich das Gleichungssystem dann übersichtlich aufschreiben. hj+1 hj + hj+1 hj µj := hj + hj+1 6 yj+1 − yj yj − yj−1 dj := − hj + hj+1 hj+1 hj λj := λ0 = d0 = µn = dn = 0 ⇒ m0 = mn = 0 2 λ0 ⇒ µ1 2 λ1 0 .. . .. . 2 ... ... λn−1 ... µn 2 µ2 .. . 0 ... · m0 m1 .. . mn = d0 d1 .. . dn 57 3. Approximative Darstellung von Funktionen Es lässt sich zeigen, dass die Matrix immer regulär ist und der Spline also immer eindeutig bestimmbar ist, auf den Beweis soll hier aber verzichtet werden. Insbesondere ist zu bemerken, dass die Matrixelemente nur von der Verteilung der Stützstellen abhängen, nicht aber von den dazugehörigen Funktionswerten. Eine Möglichkeit das LGS zu lösen ist die Verwendung des Gauss-Algorithmus. Algorithmus 3.3 (Kubische Spline-Interpolation) Gegeben sei eine Stützstellenverteilung {x0 , x1 . . . xn } mit den dazugehörigen Distanzen hi und Funktionswerten yi . Unter Verwendung eines geeigneten LGS-Lösers für das entstehende System Bm = d, berechnet der folgende Algorithmus die Koeffizien(j) ten ai der Splines. b0,0 = bn,n = 2 d0 = dn = 0 for i = 1, 2 . . . n − 1 do bi,i = 2 bi,i−1 = hi /[hi + hi+1 ] bi,i+1 = hi+1 /[hi + hi+1 ] di = 6 ([yi+1 − yi ]/hi+1 − [yi − yi−1 ]/hi ) / [hi + hi+1 ] end for löse Bm = d um die Momente mi zu bestimmen for i = 0, 1 . . . n − 1 do (i) a0 = yi (i) a1 = [yi+1 − yi ]/hi+1 − [2mi + mi+1 ]hi+1 /6 (i) a2 = mi /2 (i) a3 = [mi+1 − mi ]/[6hi+1 ] end for Die kubische Spline-Interpolation ist zwar aufwändiger als eine simple PolynomInterpolation, aber der Mehraufwand resultiert in weniger Oszillationen und einer besseren Konvergenz gegen die echte Funktion bei der Verwendung von mehr Stützstellen. 3.4. Trigonometrische Interpolation Zur Darstellung periodischer Funktionen ist eine Interpolation mit Polynomen nicht geeignet, stattdessen liegt es nahe die elementaren trigonometrischen Funktionen Si- 58 3.4. Trigonometrische Interpolation nus und Kosinus mit verschiedenen Perioden zu verwenden. Da jede Funktion g(x) mit Periodenlänge L in eine Funktion f mit Periode 2π transformiert werden kann, reicht es aus, Funktionen mit 2π-Periodizität zu verwenden. x mit g(x) = f (2π ) L g(x ± L) = g(x) f (y ± 2π) = f (y) Definition 3.2 (Trigonometrische Interpolationsfunktion) Für eine Verteilung von N Stützstellen {x0 . . . xN −1 } mit 0 ≤ x0 < . . . < xN −1 < 2π nennt man T (x) eine trigonometrische Interpolationsfunktion für eine Funktion f , wenn T (xk ) = f (xk ) ∀k = 0, . . . N − 1 und T, je nach Stützstellenzahl, die folgende Form hat: M N = 2M + 1 T (x) = A0 X + (An cos(nx) + Bn sin(nx)) 2 n=1 N = 2M T (x) = M −1 A0 X AM + (An cos(nx) + Bn sin(nx)) + cos(M x) 2 2 n=1 f(x) Da es sich hier aber nicht wie zuvor um eine Linearkombination von Monomen handelt, ist dieses Problem anspruchsvoller und nicht so einfach zu lösen wie die vorherigen Interpolationsverfahren. -2 -1 0 x in π 1 2 Abbildung 3.7.: ein Beispiel für periodische Funktionen Um die Berechnung zu vereinfachen, wird im folgenden davon ausgegangen, dass die Stützstellen äquidistant verteilt sind: xk = 2π Nk k = 0, . . . N −1. Die Verknüpfung der trigonometrischen Funktionen mit den komplexen Zahlen über die Eulersche Formel eix = cos(x) + i sin(x) lässt den Ansatz sinnvoll erscheinen, den Stützstellensatz nach C zu transformieren und dort mit einem komplexen Polynom zu interpolieren, in der Hoffnung aus dieser Interpolation Rückschlüsse auf das ursprüngliche Problem ziehen zu können. p(x) = β0 + β1 eix + β2 e2ix + . . . + βN −1 e(N −1)ix 59 3. Approximative Darstellung von Funktionen = N −1 X βn ω n ω := eix n=0 Die Transformation der Stützstellen x → eix ist hierbei wegen der bereits erwähnten Eulerschen Formel erfolgt, die einen Zusammenhang zu den Sinus- und KosinusFunktionen in dem gesuchten T herstellt. Für p(x) ist es kein Problem die Koeffizienten zu bestimmen, weil die Algorithmen und Beweise für Lagrange-Polynome auch für komplexe Polynome gelten, da keine besonderen Eigenschaften13 von R, die C nicht hat, benötigt wurden. Da nur die Stützstellen auf den Einheitskreis der komplexen Zahlen abgebildet werden, die Stützwerte aber nicht verändert werden, gilt folglich für alle Stützstellen: T (xk ) = p(xk ) = f (xk ) (3.8) Für den Bereich zwischen den Stützstellen muss dies aber nicht gelten, da p nach Konstruktion sonst auch auf dem Einheitskreis komplexe Funktionswerte annehmen darf. Über einen Koeffizientenvergleich ist es möglich mit Gleichung 3.8 die Koeffizienten der trigonometrischen Funktionen zu bestimmen. Unter der Annahme äquidistanter Stützstellen lässt sich dies auf einfache Weise durchführen. k k k xk = 2π ⇒ e−nixk = e−2πni N = e+2π(N −n)i N = e(N −n)ixk N 1 inxk ⇒ cos(nxk ) = e + e−inxk 2 1 inxk = e + ei(N −n)xk 2 1 inxk e − ei(N −n)xk sin(nxk ) = 2i Setzt man diese Gleichungen nun in T (x) ein und macht den Koeffizientenvergleich, so erhält man die Koeffizienten von T für eine ungerade Stützstellenzahl (mit n = 1 . . . M ). A0 = 2β0 β0 = A20 An = βn + βN −n βn = 12 (An − iBn ) Bn = i(βn − βN −n ) βN −n = 12 (An + iBn ) Für eine gerade Anzahl Stützstellen sieht das Ergebnis, bis auf eine kleine Modifkation, genauso aus: βM = 13 AM 2 BM = 0 Es wurde zwar eine Ordnung der Stützstellen angenommen, wenn man die Beweise nochmal durchgeht, wird man jedoch sehen, dass diese nur bei Splines eine Rolle gespielt hat. 60 3.4. Trigonometrische Interpolation In dem gerade betrachteten Sonderfall äquidistant verteilter Stützstellen gibt es aber noch eine andere, einfachere Methode zur Bestimmung der Koeffizienten des komk plexen Interpolationspolynoms. Eine genauere Betrachtung der ωk = e2πi N offenbart einige interessante Eigenschaften, die einem dann eine einfache Berechnung der βn ermöglichen. ωkl = ωkl ∀ k, l ∈ {0, . . . , N − 1} ωk−l = (ω k )l N −1 X (3.9) mit ω̄ als komplex Konjugiertes von ω ωkj ωk−l = N δjl (3.10) (3.11) k=0 Die ersten beiden Eigenschaften ergeben sich direkt aus der Definition von ωk , die dritte Eigenschaft ist weniger offensichtlich und soll deswegen noch kurz bewiesen werden. Hierzu betrachtet man das Polynom q(ω) = ω N − 1. Wie man leicht erkennt N ist jedes ωk−l eine Nullstelle dieses Polynoms (da e2πi = 1). Durch das Abspalten eines Linearfaktors kann man q wie folgt schreiben: ! N −1 X k q(ω) = (ω − 1) ωj−l k=0 q(ωj−l ) = 0 ⇒ ωj−l = 1 ∨ N −1 X k ωj−l 3.9 = k=0 j=l→ j 6= l → wj−l = 1 wj−l 6= 1 N −1 X k=0 N −1 X k=0 N −1 X k=0 N −1 X k ωj−l =0 ωkj−l = N −1 X ωkj ωk−l k=0 k ωj−l =N k ωj−l =0 k=0 Aus dieser Fallunterscheidung folgt dann sofort Gleichung 3.11. Satz 3.6 (Koeffizienten von trigonometrischen Polynomen) Für ein trigonometrisches Polynom p(x) mit Stützstellenverteilung xk = 2π Nk im Intervall [0, 2π[ gilt die Interpolationsbedingung p(xk ) = f (xk ) genau dann, wenn p(x) = N −1 X βj eijx (3.12) j=0 N −1 1 X βj = f (xk )ωk−j N k=0 ωk = eixk (3.13) 61 3. Approximative Darstellung von Funktionen für alle Koeffizienten gilt. Beweis. Es wird zuerst die Rückrichtung der Äquivalenz bewiesen, da sich die Hinrichtung danach deutlich einfacher gestaltet. p(xk ) = f (xk ) := fk 3.12 fk = N −1 X βl ωkl l=0 Betrachtet man nun für ein j = 0, . . . N −1 die rechte Seite von Gleichung 3.13, ergibt sich die Behauptung. N −1 N −1 N −1 1 XX 1 X −j fk ωk = βl ωkl ωk−j N k=0 N k=0 l=0 N −1 1 X = βl N δlj = βj N l=0 3.11 Da die Rückrichtung nun bewiesen ist, ist die Hinrichtung trivial, da aus Satz 3.1 bekannt ist, dass Lagrange-Interpolationspolynome eindeutig sind. Bei der Berechnung der Koeffizienten handelt es sich um eine diskrete Version der Fouriertransformation, wie im nächsten Kapitel gezeigt werden wird. Zunächst wollen wir aber noch den Algorithmus für die trigonometrische Interpolation aufschreiben. Algorithmus 3.4 (Trigonometrische Interpolation) P −1 ijx mit Stützstellenverteilung xk = Für ein trigonometrisches Polynom p(x) N j=0 βj e k 2π N und Funktionswerten yk im Intervall [0, 2π[ lassen sich die Koeffizienten βj wie folgt bestimmen. for m = 0, 1 . . . N − 1 do ωm = eixm end for for m = 0, 1 . . . N − 1 do PN −1 bm = k=0 yk ωk−m /N end for 62 4. Fouriertransformationen Die Bestimmung der Koeffizienten des trigonometrischen Interpolationspolynoms im vorangegangenen Abschnitt ist ein Sonderfall der in der Physik weit verbreiteten Fouriertransformationen, wie im folgenden gezeigt wird. Da Fouriertransformationen (FT) in vielen Anwendungen eine zentrale Rolle spielen, sollen hier nun das numerische Äquivalent zur analytischen FT, die diskrete Fouriertransformation (DFT), sowie die Fast Fourier Transform (FFT), eine Version mit besserer Laufzeit, vorgestellt werden. Im Anschluss werden an einigen Beispielen aus verschiedenen Bereichen der Physik ihre praktischen Anwendungsmöglichkeiten demonstriert. 4.1. Der Zusammenhang zwischen trigonometrischer Interpolation und Fouriertransformationen Die analytische Fouriertransformierte einer Funktion f (x) ist: Z ∞ 1 f (x)e−ikx dx. F(k) = 2π −∞ Da im Abschnitt 3.4 vorausgesetzt wurde, dass die Funktion periodisch ist, und die Funktion auf 2π-Periodizität transformiert wurde, sind alle relevanten Informationen also bereits im Interval [0, 2π] enthalten und in allen weiteren “Zellen” der Länge 2π ist eine Kopie dieser gespeichert. Da unendliche Grenzen in der Numerik kein Grund zur Freude sind, liegt es nahe, das Integrationsintervall auf [0, 2π] einzuschränken. 1 → F(k) = 2π Z 2π f (x)e−ikx dx. 0 Aufgrund der Periodizät von f enthält F immer noch alle Informationen, die die eigentliche FT geliefert hätte, allerdings bezogen auf die Zelle im Fourier-Raum, die zur betrachteten Zelle im ursprünglichen Raum gehört. Durch Translation in eine andere 63 4. Fouriertransformationen Zelle im Fourier-Raum lässt sich daraus aber wieder die komplette Fouriertransformierte gewinnen. Um dieses Problem nun numerisch lösen zu können, kann man f auf ein diskretes Gitter abbilden und für ein gegebenes k den Funktionswert mittels Riemann-Summen bestimmen. 4 diskretisierte Funktion 3 2 2 1 1 f(x) f(x) 4 Ausgangsfunktion 3 0 0 -1 -1 -2 -2 -3 -3 -4 -4 0 1 2 x in π (a) 0 1 x in π 2 (b) Abbildung 4.1.: Fouriertransformation am Beispiel der trigonometrischen Interpolation: 4.1a zeigt die periodische Ausgangsfunktion im Intervall [0, 2π], die für numerische Zwecke auf ein diskretes Gitter, wie in 4.1b gezeigt, reduziert wird, deren Integral für ein gegebenes k dann mit Riemann-Summen bestimmt wird. Um F numerisch darstellen zu können, wird ein Teilintervall des Fourierraums, der der fouriertransformierten Zelle entspricht, ebenfalls diskretisiert und für jeden kGitterpunkt der Funktionswert bestimmt, womit sich für die Fouriertransformierte die bei der trigonometrischen Interpolation verwendete Form ergibt. 4.2. Algorithmik der Fouriertransformation Bevor wir uns den Algorithmen zur möglichst effizienten Berechnung der Fouriertransformierten zuwenden, wollen wir zuerst noch die diskrete Fouriertransformation eindeutig definieren. Definition 4.1 (Diskrete Fouriertransformation) Die Abbildung F : CN → CN wird diskrete Fouriertransformation genannt, wenn sie die Funktionswerte einer Menge an äquidistanten Stützstellen auf die sogenannten “Fourierkoeffizienten” gemäß 4.1 abbildet. f0 β0 N −1 f 1 β1 1 X F . = . βk = fj · e−2πijk/N (4.1) . . N . . j=0 fN −1 64 βN −1 4.2. Algorithmik der Fouriertransformation Die Umkehrfunktion F −1 heißt auch inverse Fouriertransformation und entspricht der Berechnung der Stützwerte anhand der Fourierkoeffizienten. β0 f0 N −1 N −1 X X β f 1 1 −1 ijxk F . = . fk = = βj e βj · e2πijk/N . . . . j=0 j=0 βN −1 fN −1 4.2.1. Diskrete Fourier-Transformation Die naheliegende und einfachste Variante ist die direkte Berechnung der Koeffizienten, wie in der Definition angegeben. Algorithmus 4.1 (Diskrete Fouriertransformation) Gegeben seien N Stützstellen xk = 2kπ/N k = 0, 1 . . . N − 1 und ihre dazugehörigen Funktionswerte yk ∈ C. Die diskrete Fouriertransformation dieser Funktion ergibt sich aus: for m = 0, 1 . . . N − 1 do ωm = eixm end for for m = 0, 1 . . . N − 1 do PN −1 yk ωk−m /N bm = k=0 end for Diese Variante lässt sich zwar einfach implementieren, aber die Laufzeit dieser simplen Implementierung ist auch dementsprechend weit jenseits des Optimums und skaliert besonders für große Datensätze schlecht. Eine kurze Betrachtung der Implementierung zeigt, dass für jeden Koeffizienten eine linear14 mit der Gesamtzahl an Datenpunkten skalierende Anzahl an Operationen durchgeführt werden muss. Da die Anzahl der zu berechnenden Fourier-Koeffizienten aber ebenfalls linear von der Anzahl der Datenpunkte abhängt, skaliert die Gesamtlaufzeit folglich mit N 2 . Dies mag jetzt nicht so schlimm klingen, wenn man die NP-Probleme der Informatik im Hinterkopf hat. Wenn man jedoch überlegt, was dies beispielsweise für einen Datensatz mit 107 Einträgen (in etwa 10MB) bedeutet, schwindet dieser Eindruck schnell. (107 )2 = 1014 14 Der nicht konstante Zeitaufwand der Exponentialfunktion als iteratives Verfahren (bspw. über eine Taylorentwickling bis ein Konvergenzkriterium erreicht ist) wird hier vernachlässigt. 65 4. Fouriertransformationen Operationen, was für eine verfügbare CPU-Rechenkapazität von 10GHz eine Dauer von etwas weniger als 3 Stunden bedeuten würde. 4.2.2. Fast Fourier Transform Da die diskrete Fourier-Transformation nicht so skaliert, wie man es sich wünscht, liegt es nahe nach alternativen Verfahren zur Berechnung der Fourierkoeffizienten, die die Problemstruktur besser nutzen, zu suchen. Die Lösung ist die Fast Fourier Transform, die eine Laufzeit15 von N log N erzielt und damit wesentlich performanter arbeitet. Das Beispiel aus dem vorherigen Abschnitt kriegt man so in etwa 10 Millisekunden erledigt, da nur etwa 108 Operationen nötig sind. Die Grundidee der FFT ist es durch geschickte Manipulation der Vorfaktoren (anfangs die Funktionswerte) die Größe der Summen zu reduzieren und dabei die Form der DFT zu erhalten. Durch den Erhalt der DFT-Form lässt sich das Ergebnis dann mit einer Rekursion in mehreren Schritten weiter zu reduzieren, bis man schließlich im Idealfall nach log N Schritten bei Summen angekommen ist, die nur noch einen Term beinhalten. Die einfachste Variante der FFT, die im folgenden vorgestellt wird, halbiert die Größe der Summen in jedem Schritt, funktioniert dafür aber auch nur mit Datensätzen, deren Größe eine Potenz von 2 ist. Satz 4.1 (Kontraktion der Fouriertransformation für 2n Stützstellen) Eine diskrete Fouriertransformation für N = 2n Stützwerte lässt sich auf eine DFT mit 2n−1 Stützwerten zurückführen. Diese “Kontraktion” ist für alle Fourierkoeffizienten identisch und muss demzufolge nur einmal durchgeführt werden. Diese reduzierte Darstellung lässt sich mit demselben Verfahren im Anschluss abermals zusammenfassen, bis die letzte DFT nach log N Schritten nur noch einen Term in den Summen hat. 1 Beweis. Sei εN := e−2πi N und M := N . 2 βj = N −1 1 X fk · εkj N N k=0 Für gerade j := 2h lässt sich nun folgende Umformung durchführen: N βj = N β2h = N −1 X fk · ε2hk N k=0 15 Da es sich um Laufzeitabschätzungen handelt, spielt die Basis des Logarithmus keine Rolle, weil verschiedene Basen mit einem Vorfaktor ineinander umgerechnet werden können und nur das allgemeine asymptotische Verhalten interessiert. 66 4.2. Algorithmik der Fouriertransformation = = −2πi ε2M =1⇒ N = e ε2N = εN/2 = εM ⇒ = = M −1 X k=0 M −1 X fk · ε2hk N + fk · ε2hk N + k=0 M −1 X 2M −1 X k=M M −1 X fk · ε2hk N 2h(k+M ) fk+M · εN k=0 (fk + fk+M ) · ε2hk N k=0 M −1 X (fk + fk+M ) · εhk M k=0 Mit der Definition f˜k := fk + fk+M ergibt sich dann: N β2h = M −1 X f˜k · εhk M (4.2) k=0 Für ungerade j := 2h + 1 erhält man durch die selben Umformungen: N β2h+1 = M −1 X f¯k · εhk M (4.3) k=0 f¯k = (fk − fk+M ) · εkN (4.4) Die neuen Summen haben beide nur halb so viele Terme (und damit ist die Zahl der Stützstellen wieder eine Zweierpotenz), haben ebenfalls die Gestalt einer DFT und die Vorfaktoren hängen nicht von j bzw. h ab. Man braucht die f˜ und f¯ also nur einmal zu bestimmen. Da das Ergebnis wieder die Gestalt einer DFT hat, kann man in einem weiteren Schritt die Summen auf dieselbe Weise weiter zusammenfassen. Für die Implementierung der FFT ist es vorteilhaft ein paar Hilfsvariablen zu verwenden. M := 2m−1 Anzahl Summanden in jeder Summe am Ende des Schrittes R := 2n−m Anzahl der Summen zu Beginn des aktuellen Schrittes m = n, n − 1 . . . 0 Index für den Kontraktionsschritt, m = 0 ist der letzte Um die Übersicht innerhalb der einzelnen Teilsummen zu bewahren, werden außerdem noch zwei weitere Hilfsvariablen eingeführt: r gibt die aktuelle Summe an und k identifiziert zu welchem Summand aus dieser der Vorfaktor gehört. r := 0, 1, . . . R − 1 = 0, 1, . . . 2n−m − 1 67 4. Fouriertransformationen k := 0, 1, . . . M − 1 = 0, 1, . . . 2m−1 − 1 Im jedem Schritt hat man nun R Summen mit je 2M Werten {fk }, die in je zwei Mengen {fk + fk+M } und {(fk − fk+M )εkN } mit je M Elementen umsortiert werden sollen. Führt man dies n-mal durch, erhält man so N Koeffizienten, aus denen sich die βr direkt bestimmen lassen: βr = 1 (0) f N r,0 Das Superskript gibt hier und im folgenden dabei den Rekursionschritt an, wobei, der Definition von m folgend, absteigend gezählt wird. Beginnend mit den eigentlichen Stützwerten ist die Rekursion wie folgt definiert: (n) f0,k = fk (m−1) fr,k (m−1) fr+R,k (m) (m) = fr,k + fr,k+M (m) (m) = fr,k − fr,k+M εk2M Mit dieser Rekursionsformel lassen sich die βj zu Beginn jedes Zwischenschritts als N βjR+r = 2M −1 X (m) fr,k · εjk 2M j = 0, 1, . . . 2M − 1 k=0 darstellen. Sobald der Index m den Wert 0 erreicht hat, ist R = N , M = 12 (formal) und nur noch j = 0 möglich. Damit ist man fertig und die βj haben die oben angegebene Form. Weitere Details zur Herleitung und ein kompletter Beweis finden sich in der weiterführenden Literatur[1, Seite 82]. Zur praktischen Implementierung verwendet man 2 Arrays der Länge N für kom(m) plexe doubles16 , von denen einer die derzeitigen fr,k enthält und in dem anderen (m−1) die daraus berechneten fr,k gespeichert werden. Hat man einen Rekursionsschritt abgeschlossen, werden die Daten in dem ersten Array nicht länger benötigt und man kann diesen benutzen um die Ergebnisse des nächsten Schrittes zu speichern. Algorithmus 4.2 (FFT für 2n Stützstellen) Gegeben seien 2n Stützstellen xk = 2kπ/2n k = 0, 1 . . . N − 1 und ihre dazugehörigen Funktionswerte yk ∈ C. Die Fouriertransformierte βk lässt sich mit der Fast Fourier Transform berechnen. 16 Wenn die nötigen Bibliotheken für komplexe Zahlen nicht zur Verfügung stehen, tun es natürlich auch 4 Arrays mit normalen doubles. 68 4.3. Bedeutung der Fouriertransformation in der Numerik for k = 0, 1 . . . 2n − 1 do (n) f0,k = yk end for for m = n, n − 1 . . . 1 do m ε2M = e−2πi/2 for r = 0, 1 . . . 2n−m − 1 do for k = 0, 1 . . . 2m−1 − 1 do (m−1) (m) (m) fr,k = fr,k + fr,k+M (m−1) (m) (m) fr+2n−m ,k = fr,k − fr,k+2m−1 εk2M end for end for end for for r = 0, 1 . . . 2n − 1 do (0) βr = fr,0 /2n end for 4.3. Bedeutung der Fouriertransformation in der Numerik Die naheliegende Anwendung diskreter Fouriertransformationen ist dieselbe wie bei der analytischen FT, also die Aufspaltung eines periodischen Signals in seine Frequenzbestandteile. Beispiel 4.1. Im Abschnitt 4.1 wurde der Zusammenhang zwischen der Fouriertransformation und dem trigonometrischen Interpolationspolynom aus Abschnitt 3.4 dargestellt. Dieser soll nun anhand zweier konkreter Beispiele noch verdeutlicht werden. T (x) = M −1 A0 X AM + (An cos(nx) + Bn sin(nx)) + cos(M x) 2 2 n=1 Für eine Verteilung mit 1024 = 210 Stützstellen und ein monochromatisches Signal f (x) = C2 sin(2x) ergeben sich für das Interpolationspolynom durch einen Koeffizien- 69 4. Fouriertransformationen tenvergleich direkt die Koeffizienten. C 2 Bk = 0 k=2 Ak = 0 k 6= 2 Für eine Überlagerung mehrerer Sinus-Schwingungen ergibt sich das Ergebnis völlig analog. f (x) = C2 sin(2x) + C100 sin(100x) C2 = 1 Bk = C100 = 0.2 k=2 C 2 C100 0 k 6= 2 1,5 1,5 f(x) 1 Bn von f(x) 1 Bn 0,5 f(x) Ak = 0 k = 100 0 -0,5 0,5 -1 -1,5 0 0 2 4 x 6 8 10 0 20 40 n 60 80 100 Abbildung 4.2.: Zerlegung eines periodischen Signals in seine Komponenten: die linke Grafik zeigt das Ausgangssignal, die rechte das Spektrum der Koeffizienten des Interpolationspolynoms Für den Fall eines nur aus 2π-periodischen Sinus- und Kosinus-Funktionen bestehenden Signals besteht das Spektrum der Koeffizienten des Interpolationspolynoms aus einigen sauberen Peaks, enthält das Ausgangssignal jedoch Anteile, die nicht über eine endliche Linearkombination von Sinus und Kosinus darstellbar sind, bspw. eine Sägezahnfunktion, so verschmiert das Spektrum. Durch die Diskretisierung besteht auch die Gefahr hochfrequente Anteile des Spektrums, deren Periodenlänge kleiner als der Abstand zweier Gitterpunkte ist, zu verlieren. Hochfrequente Anteile, für die der Abstand zweier Gitterpunkte ein Vielfaches der Periodenlänge ist, werden durch das Gitter nicht abgebildet und gehen somit verloren. Hochfrequente Anteile, für die der Gitterabstand kein Vielfaches der Periodenlänge ist, verschmieren hingegen über mehrere Koeffizienten für Schwingungen niedrigerer Frequenz. Auch wenn es sich um einen reinen Sinus handelt, weil dieser nicht exakt auf das Gitter abgebildet werden kann und deswegen approximativ behandelt werden muss. 70 4.3. Bedeutung der Fouriertransformation in der Numerik Die Fouriertransformation in dieser Variante wird in vielen Gebieten angewendet, beispielsweise bei der Analyse von Bild- und Musikdaten, Kompressionstechniken (bspw. MP3) oder der spektralen Analyse von Meßdaten. Abseits dieser üblichen Anwendungen gibt es aber noch andere, “fremde” Möglichkeiten in der Computerphysik. Dies soll im folgenden an zwei Beispielen aus der Elektrostatik und der Quantenmechanik gezeigt werden. Beispiel 4.2. Ein anderes Anwendungsbeispiel ist die Berechnung des Potentials einer Ladungsverteilung in der Elektrostatik. Z ρ(~r0 ) 1 d~r0 V (r) = 0 4πε0 |~r − ~r | Die naheliegendste numerische Lösungsmöglichkeit dieses Problems ist eine direkte Integration. Da der Integrand aber für ~r0 → ~r einen Pol besitzt, ist dieser Ansatz nicht empfehlenswert. Eine andere Variante ist die Multipolentwicklung der Ladungsverteilung. ∞ X 1 0 ~ n 1 1 = ~r · ∇ |~r − ~r0 | n=0 n! |~r| Unter Verwendung dieser Taylorentwicklung für das Potential erhält man eine Reihenentwicklung für die Ladungsverteilung, die in der Regel recht schnell konvergiert. ! ~r ~rT Q~r 1 q d~ V (r) = + + + ... 4πε0 r r3 2r5 Z q = ρ(~r0 )d~r0 Ladung Z d = ~r0 ρ(~r0 )d~r0 Dipolmoment Z Q = (3~r0~r0T − |~r0 |2 )ρ(~r0 )d~r0 Quadrupolmoment Hierbei handelt es sich jedoch um eine Fernfeldnäherung und in der Praxis ist es deswegen oft notwendig sehr hohe Multipolmomente auszurechnen um die nötigen (relativen) Genauigkeiten zu erzielen. Aufgrund der hohen Ordnung in ~r0 sind diese jedoch numerisch nur schwer integrierbar. Neben diesen Ansätzen gibt es aber auch eine andere Möglichkeit das Problem zu lösen und dabei die zuvor angesprochenen Probleme, die bei der Integration auftreten, zu umgehen. Durch Anwendung der Fouriertransformation kann man das Problem auch im Impulsraum betrachten und dort ist die Lösung der Poissiongleichung (deren Lösung die oben angegebene Formel für das Potential ja ist) deutlich einfacher. 71 4. Fouriertransformationen Durch die Darstellung von Potential und Ladungsdichte in der Ortsdarstellung als Fourier(rück)transformierte von Potential und Ladungsdichte im Impulsraum lässt sich die Poissongleichung in eine einfache Form bringen. ρ(~r) ∆V (~r) = − Z ε0 ~ ρ(~r) = e−ik~r ρ(~k)d~k Z ~ V (~r) = e−ik~r V (~k)d~k Die inversen Transformationen ergeben sich dann folglich als: Z 1 ~ ~ ρ(k) = eik~r ρ(~r)d~r 3 (2π) Z 1 ~ ~ V (k) = eik~r V (~r)d~r 3 (2π) Das Einsetzen der Fourierdarstellungen in die Poissongleichung und Anwenden des Laplace-Operators führt dann zu: ! Z ~ ~k) eik~r ρ( −k 2 V (~k + d~k = 0 (2π 3 ) ε0 Der Integrand ist die Fouriertransformierte der Nullfunktion (rechte Seite) und muss folglich auch die Nullfunktion sein. Daraus folgt dann die Poisson-Gleichung17 in der Impulsdarstellung: ρ(~k) k 2 V (~k) = ε0 Die Lösung dieser Gleichung ist nun trivial und um das Potential V (~r) zu erhalten, muss man das erhaltene Potential im Fourierraum nur zurücktransformieren. " # ~k) F[ρ]( V (~r) = F −1 (~r) ε0 k 2 Beispiel 4.3. Ein weiteres Beispiel für alternative Anwendungen von Fouriertransformationen in der Numerik ist die Lösung der zeitabhängigen Schrödingergleichung. Für ein zeitunabhängiges Potential lässt sich die zeitabhängige Schrödingergleichung 17 In der Literatur wird oft ein Vorfaktor 4π auf der rechten Seite statt der elektrischen Feldkonstante angegeben. Dabei handelt es sich um die Formulierung der Gleichung im “Gaußschen CGSEinheitensystem”, das in numerischen Simulationen oft verwendet wird. 72 4.3. Bedeutung der Fouriertransformation in der Numerik mit Hilfe eines Produktansatzes in die stationäre Schrödingergleichung überführen, die ein Eigenwert-Problem für den Hamilton-Operator darstellt. ∂ b r, t) ψ(~r, t) = Hψ(~ ∂t 2 b = − ~ ∆ + V (~r) H 2m −iEt/~ ψ(~r, t) = e ϕ(~r) b r) = Eϕ(~r) ⇒ Hϕ(~ i~ Ansatz: Da der Hamilton-Operator ein hermitischer Operator ist, bilden seine EigenfunktioR nen in Verbindung mit dem Skalarprodukt hχ| ηi = χ(~r)η(~r)d~r eine vollständige (und orthogonale) Basis des Hilbertraums. Aufgrund dieser Eigenschaft kann man jeb de Wellenfunktion immer als Linearkombination von den Eigenfunktionen ϕn von H darstellen. ∞ X ψ(~r, t) = αn (t)ϕn (~r) n=0 Diesen Ansatz kann man nun wieder in die zeitabhängige Schrödingergleichung einsetzen. ∞ ∞ X ∂ X b αn (t)ϕn (~r) = H αn (t)ϕn (~r) i~ ∂t n=0 n=0 ⇒ i~ ∞ X α̇n (t)ϕn (~r) = n=0 ∞ X En αn (t)ϕn (~r) n=0 Berechnet man nun das Skalarprodukt mit einem hϕm |, erhält man unter Ausnutzung der Orthonormalität der Eigenfunktionen (hϕm | ϕn i = δn,m ) eine Differentialgleichung für die Koeffizienten αn . i~ ∞ X α̇n (t) hϕm | ϕn i (~r) = n=0 ∞ X En αn (t) hϕm | ϕn i (~r) n=0 ⇒ i~α̇m (t) = Em αm (t) ⇒ αm (t) = αm (0)e−iEm t/~ Damit ergibt sich die allgemeine Lösung, dargestellt in der Basis der Eigenfunktionen b als: von H ψ(~r.t) = ∞ X αn e−iEn t/~ ϕn (~r) n=0 73 4. Fouriertransformationen Für den Spezialfall, dass nur ein αn (0) 6= 0 ist, bleibt das System also für alle Zeiten im selben physikalischen Zustand und bekommt nur einen Phasenfaktor hinzu. Für eine allgemeine Lösung kann man nun die Autokorrelationsfunktion C(t) und deren Fouriertransformierte B(ω) bestimmen. Die Koeffizienten sind im Folgenden als die Ausgangswerte zum Zeitpunkt 0 zu verstehen. Z C(t) = hψ(t)| ψ(0)i = ψ(~r, t)ψ(~r, 0)d~r = = ∞ X n,m=0 ∞ X |αn |2 eiEn t/~ n=0 Z ∞ B(ω) = = αn αm eiEn t/~ hϕn | ϕm i C(t)e−iωt dt −∞ ∞ X 2 Z ∞ ei(En /~−ω)t dt |αn | −∞ n=0 Da die Fouriertransformierte einer Konstante eine Delta-Funktion ist (“Fourieridentität der Deltafunktion”), lässt sich das Integral auch einfach ausrechnen. B(ω) = 2π ∞ X |αn |2 δ(En /~ − ω) n=0 Stellt man B(ω), wie in Abbildung 4.3 gezeigt, graphisch dar, stellt man schnell fest, dass B(ω) die spektrale Zerlegung des Zustandes ψ in die verschiedenen Eib darstellt. In der Praxis kann man die Fouriertransformation genfunktionen von H der Autokorrelationsfunktion auch als Fourier-Reihe dieser betrachten (mit unendlicher Periodizität T für C(t)). Alternativ dazu kann man T auch so wählen, dass C(t > T /2) ≈ 0 gilt und die Funktion als T -periodisch betrachten. Berechnet man das Integral nun mit Hilfe von Riemann-Summen an N = 2M + 1 Stützstellen tk = T /2M · k, k = −M . . . 0 . . . M , erhält man dann: Z ∞ B(ω) = C(t)e−iωt dt −∞ = lim M →∞ = lim M →∞ 74 M X C(tk )eiωtk ∆t k=−M M X k=−M C(tk )eiωkT /2M T 2M 4.3. Bedeutung der Fouriertransformation in der Numerik Wertet man dieses Fouriertransformierte nun für bestimmte Frequenzen ωj = 2πj aus, hat die Summe genau die Form der diskreten Fouriertransformation. Setzt man nun die C(tk ) explizit ein, erhält man einen Ausdruck, der der diskreten Version des zuvor hergeleiteten entspricht: B(ωj ) = ∞ X |αn |2 · δ~ωj ,En n=0 Folglich hat also auch die diskrete Fouriertransformation der Autokorrelationsfunk- |αn|2 B(ω) B(ωj) |αn |2 E1 E2 E3 (a) E4 E5 ℏω1 ℏω2 ℏω3 ℏω4 ℏω5 (b) b mit Hilfe der Abbildung 4.3.: spektrale Zerlegung einer Wellenfunktion in die Eigenzustände von H Fouriertransformierten der Autokorrelationsfunktion, 4.3a stellt die das Ergebnis einer analytischen Fouriertransformation dar, 4.3b das einer diskreten FT tion bei den Eigenwerten der stationären Schrödingergleichung Peaks. Die Höhe der Peaks entspricht auch in diesem Fall den Gewichten der einzelnen Eigenzustände. In der Praxis ist es meist deutlich einfacher |ψ(t)i aus |ψ(0)i zu bestimmen als eine b vorzunehmen. echte Diagonalisierung von H 75 5. Numerische Integration Die Berechnung von Integralen ist eine grundlegende Aufgabe in der numerischen Physik, die an vielen Stellen Verwendung findet. Neben den offensichtlichen Anwendungen wird die numerische Integralrechnung aber beispielsweise auch eingesetzt um Differentialgleichungen zu lösen. Durch Reformulierung einer Differentialgleichung als Integralgleichung lässt sich diese mit Hilfe geeigneter Algorithmen und Integrationsverfahren lösen. Im Folgenden werden deswegen verschiedene Integrationsmethoden vorgestellt, angefangen mit der Integration nach Newton/Cotes, die auf der Verwendung von Lagrange-Interpolationspolynomen basiert. Im Anschluss daran werden die Gauß-Integration, die eine höhere Genauigkeit erreicht, und die Monte Carlo Integration, ein alternativer Ansatz auf stochastischer Basis, vorgestellt. 5.1. Quadratur nach Newton/Cotes Für eine Funktion f , deren Funktionswerte fk zumindest an N + 1 Stützstellen x0 . . . xN bekannt sind, kann man eine Approximation durch ein Interpolationspolynom pN (x), wie es in Teilabschnitt 3.1.1 vorgestellt wurde, als Grundlage für das Integral verwenden. Z b Z b f (x)dx ≈ pN (x)dx a pN (x) = N X fi Li (x) i=0 a mit Li (x) = N Y x − xj xi − xj j=0; j6=i Durch die Verwendung äquidistant verteilter Stützstellen lassen sich aus dem Interpolationspolynom Integrationsformeln gewinnen, für die es nicht mehr notwendig ist zuvor explizit zu interpolieren. Stützpunkte xk = x0 + kh h= xN − x0 N 77 5. Numerische Integration f(x) p(x) y Fehler x Abbildung 5.1.: Approximation des Integrals im Intervall [x0 , xN ] durch ein Interpolationspolynom Hilfsvariable t x = x0 + th t= →Li (x) := ϕi (t) = x − x0 h N Y t−j i−j j=0; j6=i Verwendet man nun das Interpolationspolynom zur Approximation des Integrals und substituiert x mit t, erhält man einen Ausdruck, der nur noch von den Stützwerten und der Anzahl der Stützstellen abhängt, nicht aber mehr von den Positionen der Stützstellen. Z xN pN (x)dx = x0 N X Z Li (x)dx x0 i=0 Substitution: xN fi x = x0 + ht ⇒=h N X t(x = xN ) = N N Z fi i=0 ϕi (t)dt 0 Aufgrund der Unabhängigkeit von x sind die Integrale also konstante, universelle Gewichtungsfaktoren αi , die zu den sogenannten “Newton-Cotes-Formeln” führen: Z xN pN (x)dx = x0 N X f i αi i=0 Für den einfachsten Fall zweier Stützstellen (N = 1) ergeben sich die Gewichtungsfaktoren als: Z 1 t−1 1 =1−t → α0 = ϕ0 (t)dt = ϕ0 (t) = 0−1 2 0 78 5.1. Quadratur nach Newton/Cotes t−0 =t ϕ1 (t) = 1−0 1 Z → α1 = ϕ1 (t)dt = 0 1 2 Die Approximation für das Integral ist dann folglich: Z x1 x1 Z f (x)dx ≈ p1 (x)dx = h 1 X x0 x0 i=0 1 1 αi f (xi ) = (x1 − x0 )( f (x0 ) + f (x1 )) 2 2 Das dazugehörige Interpolationspolynom ist dann p1 (x) = f (x0 ) + (x − x0 ) f (xN ) − f (x0 ) xN − x0 was anschaulich der Approximation des Integrals durch ein Trapez entspricht, daher auch der Name “Trapezregel” für diesen Fall. y f(x) p1(x) x0 x1 x Abbildung 5.2.: Integration nach Newton-Cotes für N = 1, die “Trapezregel” Beispiel 5.1. Die Trapezregel liefert sogar bessere Ergebnisse als man ihr auf den ersten Blick zutrauen würde. f (x) = Z 1 f (x)dx x=tan y = 4 1 + x2 4 y|π/4 =π 0 0 Trapezregel: f (x0 = 0) = 4 Z 1 ⇒ f (x)dx ≈ 3 f (x1 = 1) = 2 0 Die nächsthöhere Ordnung (N = 2) ergibt die sogenannte “Simpson-Regel”. Z 2 1 t−1 t−2 dt = α0 = 3 0 0−10−2 79 5. Numerische Integration 2 4 t−0 t−2 dt = 1−01−2 3 Z0 2 t−0 t−1 1 α2 = dt = 2−02−1 3 Z0 x2 Z x2 h p2 (x)dx = (f0 + 4f1 + f2 ) f (x)dx ≈ 3 x0 x0 Z α1 = Auf dieselbe Weise lassen sich auch Verfahren höherer Ordnung bestimmen, die in der Literatur gefunden werden können. Die Gewichte haben neben ihrer Universalität noch eine andere interessante EigenP schaft: N i=0 αi = N . Um dies zu zeigen, wählt man f (x) = 1, womit pN (x) = 1 das Interpolationspolynom für alle N ist, und [0, 1] als Integrationsintervall. Z 1 Z f (x)dx = 0 0 1 N 1 X αi = 1 pN (x)dx = N i=0 ⇒ N X αi = N i=0 Der Fehler dieser Quadraturformeln ist ähnlich dem des zugrundeliegenden Interpolationspolynoms: ∀ n∃ m ∈ N ∧ m > n; k ∈ R; ξ ∈ [x0 , xN ] mit Z xN pN (x) − f (x)dx = hm+1 kf (m) (ξ) x0 Auf einen Beweis wird an dieser Stelle verzichtet und nur darauf verwiesen, dass k und m von N abhängen, nicht aber von f (x). Demzufolge werden auch alle Polynome mit Grad < m exakt durch das dazugehörige Newton-Cotes-Verfahren integriert, da die m-te Ableitung 0 ist. N 1 2 4 αi 1 1 , 2 2 1 4 1 , , 3 3 3 7 16 2 16 7 , , , , 90 45 15 45 90 Fehler h3 (2) f (ξ) 12 h5 (4) f (ξ) 90 8h7 (6) f (ξ) 945 Tabelle 5.1.: Gewichte für einige Newton-Cotes-Verfahren und ihre Fehler Für N > 6 werden die Newton-Cotes-Formeln numerisch instabil, da negative Gewichte auftreten, durch die kleine Änderungen in f (x) in der Summen-Approximation deutlich mehr Einfluss haben als im echten Integral. Dies ist einer der Gründe dafür, 80 5.1. Quadratur nach Newton/Cotes warum man in der Praxis keine Newton-Cotes-Quadraturformeln hoher Ordnung einsetzt. Stattdessen teilt man, analog zum Spline-Ansatz bei der Interpolation, das Integrationsintervall in mehrere Intervalle auf und wendet dann auf jedem Teilintervall Newton-Cotes-Formeln mit niedriger Ordnung an (“summierte Quadraturformeln”). Im einfachsten Fall N = 1 ergibt sich dann die M -fache Trapezformel: b Z f (x)dx = a M −1 Z a+(m+1) b−a X M m=0 M −1 X ≈δ f (x)dx a+m b−a M f (a + mδ) + f (a + (m + 1)δ) 2 m=0 f (b) f (a) + f (a + δ) + f (a + 2δ) + . . . + f (b − δ) + =δ 2 2 Alternativ dazu kann man natürlich auch die Simpson-Regel auf N −1 2 Teilintervalle f(x) Teilintervalle für Simpsonregel y y f(x) p1(x) (gestückelt) x x Abbildung 5.3.: summierte Quadratur mit Trapezregel (links) und Simpson-Regel (rechts) [x2i , x2i+2 ] mit je 3 Stützstellen anwenden. Z b M −1 δ X f (a + mδ) + 4f (a + (m + 1)δ) + f (a + (m + 1)δ) 3 m=0 δ = f (a) + 4f (a + δ) + 2f (a + 2δ)+ 3 4f (a + 3δ) + . . . + f (b − 2δ) + 4f (b − δ) + f (b) f (x)dx ≈ a Der Vorteil bei zweiterer Variante liegt darin, dass der numerische Fehler aus der Integration im allgemeinen geringer sein wird, da dieser hier mit δ 4 statt wie bei der Trapezregel δ 2 skaliert (siehe Tabelle 5.1). Algorithmus 5.1 (Summierte Quadratur) Gegeben sei eine Funktion f (x), die durch n-fache Anwendung der Newton-CotesFormeln der Ordnung m im Intervall (a, b) integriert werden soll. Mit den Gewichten 81 5. Numerische Integration αi , die sich in der Literatur finden lassen (oder in Tabelle 5.1) ergibt sich das bestimmte Integral I aus dem folgenden Algorithmus: h = (b − a)/(m · n) I=0 for i = 0, 1 . . . n − 1 do for j = 0, 1 . . . m do I = I + αj f (a + [i · m + j] · h) end for end for I =I ·h Beispiel 5.2. Z 1 π= 0 Für den Fehler π − h P P m N 1 2 4 i 4 dx 1 + x2 fi αi ergibt sich dann exemplarisch: Trapezregel 0.1416 0.0416 0.0104 Simpson-Regel N ≥ 2 nötig 0.00826 0.00002 Eine weitere Verbesserungsmöglichkeit für die Ergebnisse der Quadraturformeln ist die Verwendung von Hermite-Polynomen anstelle von Lagrange-Polynomen zur Interpolation, sofern die erste Ableitung von f (x) bekannt ist. Hierzu sei auf weiterführende Literatur verwiesen. 5.2. Integration nach Gauß Summierte Quadraturen liefern für hinreichend glatte Funktionen gute Ergebnisse, bei stark oszillierenden Funktionen hängt die Qualität der Ergebnisse hingegen sehr stark davon ab, wie gut die Stützstellen die Oszillationen abbilden. Für die akkurate Integration derartiger Funktionen ist es notwendig Verfahren zu haben, die Polynome möglichst hohen Grades exakt integrieren können. Um dieses Ziel zu erreichen, 82 5.2. Integration nach Gauß kann man die Gauß-Integration verwenden, bei der mit N Stützstellen Polynome mit Grad bis zu 2N − 1 exakt integriert werden können. Um dieses Ziel zu erreichen, konstruiert man zuerst eine orthogonale Basis für eine Teilmenge des Polynomrings mit einem gegebenen Skalarprodukt. Durch die Wahl der Nullstellen dieser Polynome als Stützstellen für die Integration ist es dann möglich die gewünschte Genauigkeit zu erzielen. Hierzu werden allgemeine Integrale der Form Z b ω(x)f (x)dx I[f ] = a betrachtet, wobei ω(x) eine Gewichtsfunktion darstellt, die folgende Eigenschaften erfüllt: ω(x) ≥ 0 ∀ x ∈ [a, b] Z b µk := xk ω(x)dx < ∞ ∀k ∈ N (5.1a) (5.1b) a µ0 > 0 (5.1c) Die Integrationsgrenzen a und b müssen hierbei nicht zwangsläufig endlich sein, solange die Gewichtungsfunktion sicherstellt, dass das Integral für alle Monome konvergent bleibt (Gleichung 5.1b). Gesucht sind nun Integrationsregeln der Gestalt PN I[f ] ≈ I˜[f ] := i=1 ωi f (xi ). Allerdings sollen die Stützstellen nicht mehr wie bei Newton-Cotes äquidistant sein, sondern so gewählt werden, dass mit passenden Gewichten ωi für Polynome möglichst hohen Grades I[f ] = I˜[f ] gilt. Im Folgenden wird die Teilmenge Πj des Polynomrings, die alle Polynome vom Grad ≤ j enthält, betrachtet, für die eine orthogonale Basis bezüglich des Skalarprodukts hf | gi gesucht ist. Um die Eindeutigkeit dieser Basis zu gewährleisten wird die Suche auf die Teilmenge der normierten Polynome aus Π̃j beschränkt. ) Πj = p(x) = ak x k ak ∈ R k=0 ( ) j X Π̃j = p(x) = ak x k ak = j ; ak ∈ R k=0 Z b hf | gi = ω(x)f (x)g(x) dx ( j X a 83 5. Numerische Integration Satz 5.1 (Existenz & Eindeutigkeit von Orthogonalbasen für Polynome) Für Πj gibt es einen eindeutig bestimmten Satz an normierten Polynomen pi aus der Teilmenge Π̃j , die orthogonal zueinander bezüglich des Skalarprodukts hf | gi sind (hpi | pk i = 0 ∀k 6= i). Diese sind dann rekursiv bestimmt durch: p0 (x) = 1 2 pi+1 = (x − λi+1 )pi (x) − γi+1 pi−1 (x) λi+1 = 2 = γi+1 hxpi | pi i hp | p i i i hpi | pi i i≥1 0 i=0 hpi−1 | pi−1 i Beweis. Der Beweis erfolgt über Induktion. Der Induktionsanfang für i = 0 ist trivial, da keine Polynome geringeren Grades existieren (formal wäre p−1 = 0, womit die Orthogonalität auch erfüllt ist). Für den Fall i ≥ 1 nimmt man an, dass die Behauptung für einen Satz Polynome pj (x) für alle j ≤ i erfüllt ist. zu zeigen: ∃ pi+1 (x) ∈ Π̃i+1 : hpi+1 | pj i = 0 ∀ j ≤ i Jedes Polynom aus Π̃j kann auch dargestellt werden als i−1 X pi+1 (x) = (x − ci )pi (x) + cj pj (x) j=0 wie man leicht über einen Koeffizientenvergleich unter Berücksichtigung der Normierung verifizieren kann. Mit dieser Darstellung kann man das Skalarprodukt mit dem vorherigen Polynom unter Verwendung der Orthogonalität für die pj (x) dann leicht ausrechnen: + * i−1 X hpi+1 | pi i = (x − ci )pi (x) + cj pj (x) pi j=0 ! = hxpi | pi i − ci hpi | pi i = 0 i | pi i Wählt man ci = hxp = λi , ist die Orthogonalitätsbedingung erfüllt. hpi | pi i Für die restlichen Koeffizienten betrachtet man nun das Skalarprodukt mit den noch verbleibenden pj (x) mit j < i und verwendet wieder die bekannten Orthogonalitäten aus der Induktionsvorraussetzung. + * i−1 X hpi+1 | pk i = (x − ci )pi (x) + cj pj (x) pk j=0 84 5.2. Integration nach Gauß = h(x − ci )pi (x)| pk i + * i−1 X j=0 + cj pj (x) pk = hxpi | pk i + ck hpk | pk i = hpi | xpk i + ck hpk | pk i Da nun k < i gilt, kann man xpk über die geltende Rekursionsvorschrift ausdrücken. 2 pk−1 (x) pk+1 (x) = (x − λk+1 )pk (x) − γk+1 2 ⇒ xpk (x) = pk+1 (x) + λk+1 pk (x) + γk+1 pk−1 (x) Setzt man dies nun in den zuvor erhaltenen Ausdruck für Skalarprodukt mit pk ein, so erhält man: 2 = pi pk+1 + λk+1 pk + γk+1 pk−1 + ck hpk | pk i = hpi | pk+1 i + ck hpk | pk i i Wählt man nun ck = − hphpi |kp|k+1 , ist die Orthogonalität auch zu pk erfüllt. Durch die pk i Wahl aller ck nach den angegebenen Formeln erhält man nun ein eindeutiges Polynom vom Grad j + 1. Berücksichtigt man noch die vorhandenen Orthogonalitäten, sieht 2 ist, womit die Rekursionsformel man, dass die ck = 0 für k < i − 1 und ci−1 = −γi+1 bewiesen ist. Hierbei ist zu beachten, dass die Menge der pj natürlich von dem gewählten Skalarprodukt abhängt, für ein bestimmtes Skalarprodukt aufgrund der Normierung des Leitkoeffizienten aber eindeutig ist. Aus dieser Konstruktion ergibt sich dann auch gleich eine weitere Orthogonalitätsrelation zwischen den pj und beliebigen Polynomen geringeren Grades, die für die Gauß-Integration eine entscheidene Rolle spielt. Satz 5.2 (weitere Orthogonalitäten der Orthogonalbasis für Polynome) Für die Polynome pn (x) gemäß Satz 5.1 gilt für alle Polynome q(x) vom Grad m die Orthogonalitätsrelation: hq| pn i = 0 ∀ m < n Beweis. Zum Beweis dieser Behauptung wird nun die bereits angedeutete Eigenschaft benötigt, dass die p0 bis pj eine Basis von Πj sind. q(x) = m X k=0 αk x k pk (x) = k X γs(k) xs s=0 85 5. Numerische Integration Sofern die p0 bis pj nun eine Basis von Πj sind, kann man q(x) auch als Linearkombination dieser schreiben. Dass dies immer möglich ist, soll nun gezeigt werden, indem die Behauptung als wahr angenommen wird und dann gezeigt, dass es eine eindeutige, immer lösbare Darstellung gibt. ! q(x) = = m X k=0 m X ck pk (x) ck k X γs(k) xs s=0 k=0 Schaut man sich genauer an, wie die Koeffizienten zu den einzelnen Potenzen von x beitragen, sieht man schnell, dass diese Darstellung ein lineares Gleichungssystem mit einer unteren Dreiecksmatrix ist. m X ck k=0 (0) γ0 (1) γ0 (2) γ0 .. . (m) γ0 0 (1) γ1 ... ... s=0 ... . . . γm γ3 0 .. . .. . .. . (m) (m) = m X α k xk k=0 .. γ1 .. . γ1 γs(k) xs (2) (2) γ1 k X . (m) c0 c1 c2 .. . cm = α0 α1 α2 .. . αm Dieses lässt sich immer eindeutig lösen und q(x) kann wie behauptet als Linearkombination der p0 bis pj dargestellt werden. Daraus folgt dann hq| pn i = m X ck hpk | pn i k=0 =0 weil k < n nach Vorraussetzung ist. Da bereits angesprochen wurde, dass den Nullstellen dieser Polynome eine besondere Bedeutung zukommt, sollen nun ein paar Eigenschaften dieser gezeigt werden. Satz 5.3 (Eigenschaften der Nullstellen der Orthogonalbasis-Polynome) Alle Nullstellen xi (i = 1 . . . n) von pn sind reell, einfach und liegen in dem offenen Intervall ]a, b[. Beweis. Der Beweis erfolgt durch Widerspruch. Hierzu sei angenommen, dass a < x1 < x2 < . . . < xl < b die Nullstellen des Polynoms sind, die reell sind, in dem 86 5.2. Integration nach Gauß Intervall ]a, b[ liegen und eine ungerade (nicht unbedingt einfache) Vielfachheit haben. Außerdem ist l < n, damit mindestens eine Nullstelle die Bedingungen nicht erfüllt. q(x) := l Y (x − xj ) vom Grad l < n j=1 ⇒ hq| pn i Satz 5.2 = 0 Da alle xj ungerade Nullstellen sind, ändern sowohl q(x) als auch pn (x) ihre Vorzeichen an dieser Stelle, womit sich das Vorzeichen des Produkts nicht ändert, und aufgrund der positiven Semidefinitheit der Gewichtungsfunktion (Gleichung 5.1a) auch das Vorzeichen des Integrandem im Skalarprodukt. Da alle weiteren Nullstellen von pn (x) entweder außerhalb des Integrationsintervalls liegen oder eine gerade Vielfachheit haben und damit keinen Einfluss auf das Vorzeichen von q(x) · pn (x) im Intervall haben, muss also gelten: hq| pn i = 6 0 Da dies jedoch ein Widerspruch zu Satz 5.2 ist, muss demzufolge l ≥ n gelten. Damit die Konstruktion von q(x) gültig bleibt muss jedoch jede Nullstelle einfach sein, da sonst die Zahl der Nullstellen höher wäre als der Grad des Polynoms. Bevor mit Hilfe dieser Polynome nun ein Integrationsschema konstruiert werden kann, wird noch ein weiterer Satz über ihre Eigenschaften benötigt. Satz 5.4 (Regularität von Matrizen mit den Orthogonalbasis-Polynomen) Für beliebige, aufsteigend geordnete, paarweise verschiedene ti ∈ R ist die n × nMatrix p0 (t1 ) p0 (t2 ) . . . p0 (tn ) p1 (t1 ) p1 (t2 ) . . . p1 (tn ) A := .. .. .. .. . . . . pn−1 (t1 ) pn−1 (t2 ) . . . pn−1 (tn ) immer regulär. Beweis. Angenommen, es gäbe ein ~c ∈ Rn mit ~cT A = 0, dann gilt: ~cT A m = ~cT · (Spalte m von A) = n−1 X ci pi (tm ) = 0 ∀m i=0 87 5. Numerische Integration P Daraus folgt, dass das Polynom q(x) = n−1 i=0 ci pi (x) die n Nullstellen ti hat. Dies ist aber ein Widerspruch, da die pi (x) maximal vom Grad n − 1 sind und q(x) demzufolge keine n Nullstellen haben kann. Demzufolge kann ein ~c, dass die Singularitätsbedingung erfüllt, nicht existieren, woraus folgt, das A regulär ist. Nun sind alle Vorraussetzungen erfüllt um endlich die Gauß-Integration zu konstruieren und zu beweisen. Satz 5.5 (Eigenschaften der Gauß-Integration) Seien {xi } i = 1 . . . n die Nullstellen von pn für ein gegebenes n, dann gilt: 1. Das LGS p0 (x1 ) p1 (x1 ) .. . p0 (x2 ) p1 (x2 ) .. . ... ... ... p0 (xn ) p1 (xn ) .. . pn−1 (x1 ) pn−1 (x2 ) . . . pn−1 (xn ) ω1 ω2 .. . = ωn hp0 | p0 i 0 .. . 0 für die {ωi } ist immer eindeutig lösbar. 2. wi > 0 Rb P 3. a ω(x)p(x)dx = ni=1 wi p(xi ) (Gauß-Integrationsformel) für beliebige Polynome vom Grad ≤ 2n − 1 4. Es gibt keine {xi , ωi } i = 1 . . . n für die alle Polynome vom Grad 2n mit der Gauß-Integrationsformel exakt integriert werden können. Beweis. Behauptung 1 folgt direkt aus den zuvor bewiesenen Sätzen. Aus Satz 5.3 folgt, dass die xi alle verschieden sind und mit Satz 5.4 folgt dann sofort die Invertierbarkeit der Matrix und damit die eindeutige Lösbarkeit des LGS. Um die 3te Behauptung zu zeigen, drückt man ein Polynom p(x) vom Grade ≤ 2n−1 mittels der pk (x) aus: p(x) = pn (x) · q(x) + v(x) q(x) = n−1 X k=0 αk pk (x) v(x) = n−1 X βk pk (x) (5.2) k=0 Dass diese Darstellung von p(x) immer möglich ist, kann man über einen Koeffizientenvergleich leicht verifizieren, die Darstellung von q(x) und v(x) wurde bereits in einem der vorangegangenen Beweise diskutiert. Mit dieser Darstellung ist es nun 88 5.2. Integration nach Gauß möglich das Ergebnis sowohl der analytischen als auch der numerischen Integration zu bestimmen. Z b Z b ω(x) (pn (x) · q(x) + v(x)p0 (x)) dx ω(x)p(x)dx = a a = hpn | qi + hv| p0 i 5.2 = n−1 X (αk hpn | pk i + βk hpk | p0 i) k=0 = β0 hp0 | p0 i (5.3) Für das numerische Schema ergibt sich dann, unter Berücksichtigung der Tatsache, dass die Stützpunkte xi die Nullstellen von pn (x) sind: n X ωi p(xi ) = i=1 = n X i=1 n X ωi (pn (x) · q(x) + v(x)p0 (x)) ωi v(xi ) i=1 n X n−1 X 5.2 βk ωi pk (xi ) = i=1 k=0 = β0 hp0 | p0 i (5.4) Der letzte Schritt ergibt sich aus einem Vergleich der Struktur der Summe über i mit dem LGS aus Behauptung 1, woraus erkennbar ist, dass diese für k 6= 0 verschwindet. Damit sind das analytische Integral (Gleichung 5.3) und der numerische Ausdruck (Gleichung 5.4) also für alle Polynome vom Grad ≤ 2n − 1 also identisch, was einer exakten Integration entspricht. Um die Behauptung 2 zu zeigen, definiert man einen neuen Satz Hilfspolynome ti (x): ti = n Y (x − xj )2 j=1; j6=i Aufgrund der Positivität der Gewichtungsfunktion, sowie die Semi-Positiv-Definitheit von ti (x), muss das Integral von ti (x) also größer als 0 sein. Setzt man dieses Polynom vom Grad 2n − 2 nun als p(x) in die im Beweis für Behauptung 3 gewonnenen Ausdrücke für das Integral ein, erhält man eine Aussage über das Vorzeichen von ωi : Z 0< b ω(x)ti (x)dx = a n X ωk ti (xk ) k=1 89 5. Numerische Integration = ωi ti (xi ) > 0 Aufgrund der Konstruktion der ti (x) fallen alle anderen Beiträge der Summe weg, weil sie an Nullstellen der Funktion ausgewertet werden, und aus dem übrig bleibenden Term lässt sich die Positiv-Definitheit von ωi erkennen. Für Behauptung 4 schließlich führt man einen Beweis durch ein Gegenbeispiel. n Y t(x) = (x − xj )2 j=1 Setzt man dieses Polynom in die Integrationsformeln aus den vorherigen Teilbeweisen ein, erhält man für beliebige {ωi } immer 0 als Wert des Integrals, da alle Nullstellen von pn (x) auch Nullstellen von t(x) sind. Andererseits lässt sich aus der Definition von t(x) aber erkennen, dass das Integral echt größer 0 sein muss, womit ein für jedes n ein Polynom vom Grade 2n existiert, dass nicht exakt integriert werden kann. Algorithmus 5.2 (Gauß-Integration mit Legendre-Polynomen) Gegeben sei eine Funktion f (x), deren Integral im Intervall (a, b) mittels GaußIntegration n-ten Grades bestimmt werden soll. Mit den bekannten Nullstellen xi und Gewichten ωi der Legendre-Polynome ergibt sich das bestimmte Integral I aus dem folgenden Algorithmus. I=0 for i = 0, 1 . . . n − 1 do I = I + ωi f (a + (xi + 1) · (b − a)/2) end for I = I · (b − a)/2 Vergleicht man nun die Quadratur nach Newton-Cotes mit der Gauß-Integration, sieht man, dass beide Verfahren ihre Vor- und Nachteile haben. Gauß-Integrationen bieten eine deutlich höhere Genauigkeit, allerdings sind die Gewichtungsfaktoren und Stützstellen auch entsprechend aufwendiger zu bestimmen. Die Stützstellen sind nur numerisch bekannt und insbesondere nicht regelmäßig angeordnet. 90 5.3. Monte Carlo Integration Beispiel 5.3. In der folgenden Tabelle sind die häufiger verwendeten OrthogonalPolynome aufgelistet, mit denen sich die allermeisten relevanten Intervalle mithilfe von Transformationen abdecken lassen. (Auf die Normierung der Leitkoeffizienten wurde bei den Beispielen verzichtet.) ω(x) [a, b] [−1, 1] √ 1 1−x2 Polynome Tschebyscheff-Polynome [−1, 1] 1 Legendre-Polynome [0, ∞] e−x Laguerre-Polynome [−∞, ∞] e−x 2 Hermite-Polynome pn (x) T1 (x) = x T2 (x) = 2x2 − 1 T3 (x) = 4x3 P1 (x) = x P2 (x) = 21 (3x2 − 1) P3 (x) = 21 (5x3 − 3x) L1 (x) = −x + 1 L2 (x) = 12 (x2 − 4x + 2) P3 (x) = 16 (−x3 + 9x2 − 18x + 6) H1 (x) = 2x P2 (x) = 4x2 − 2 P3 (x) = 8x3 − 12x Tabelle 5.2.: einige übliche Orthogonalpolynome, p0 (x) = 1 in allen Fällen 5.3. Monte Carlo Integration Die bisher vorgestellten Methoden zur numerischen Integralrechnung basieren auf der Interpolation des Integranden durch Polynome. Die Monte Carlo Integration hingegen ist ein alternativer Ansatz, der auf einer statistischen Interpretation des Integrals basiert. Es gilt Z b I= f (x)dx = (b − a) · f (5.5) a gemäß der Definition eines Integrals, wobei f¯ der Mittelwert der Funktion auf dem Intervall [a, b] ist. Weiterhin gilt für eine Menge {xi ∈ [a, b]} von N unabhängigen, gleichverteilten Zufallszahlen N 1 X I lim f (xi ) = f = N →∞ N b−a i=1 (5.6) 91 5. Numerische Integration nach dem Gesetz der großen Zahlen. Hierbei ist es wichtig zu beachten, dass die Konvergenz von Gleichung 5.5 für Regelfunktionen18 im analytischen Kontext garantiert ist. Gleichung 5.6 hingegen ist eine Aussage statistischer Natur und daher nur als Wahrscheinlichkeitsaussage für die Konvergenz zu verstehen. Da in der Anwendung aber nur endliche N realisierbar sind, stellt sich die Frage, wie sich der Fehler verhält, wenn man I über Gleichung 5.6 unter Verwendung von N Stichproben bestimmt. Hierzu betrachtet man die Varianz der Differenz zwischen dem Ergebnis der Monte Carlo Integration und dem echten Integral. Im folgenden sind f = hf (x)i und f 2 = hf 2 (x)i der Mittelwert beziehungsweise die Varianz des Integranden. Die Varianzen sind hier exakte, analytische Werte, die sich unter Berücksichtigung aller möglichen Realisierungen von N unabhängigen, gleichverteilten Zufallszahlen xi im Intervall [a, b] ergeben. !2 + * !2 + * N N N b−aX b−aX b−aX f (xi ) − I f (xi ) − 2I f (xi ) + I 2 = N i=1 N i=1 N i=1 * N !2 + N X Linearität der Varianz (b − a)2 b−aX ⇒= − 2I f (xi ) hf (xi )i + I 2 N2 N und der Summe i=1 i=1 * N !2 + X (b − a)2 2 2 I = (b − a)f ⇒ = f (xi ) − 2(b − a)2 f + (b − a)2 f N2 i=1 !2 + 2 * X N b−a 2 = f (xi ) − N 2f (5.7) N i=1 Nun ist es also noch notwendig einen Ausdruck für die noch übriggebliebene Varianz zu finden. * N !2 + * N + X X f (xi ) = f (xi )f (xj ) i=1 i=1,j=1 = N X N X hf (xi )f (xj )i f 2 (xi ) + i=1 i,j=1;i6=j Weil die beiden Verteilungen xi und xj in der zweiten Summe unabhängig voneinander sind, kann man die Varianz der beiden Faktoren seperat bestimmen. = N X i=1 18 f2 +2 N X N X hf (xi )i hf (xj )i i=1 j=i+1 Als Regelfunktionen bezeichnet man Funktionen, die entweder stetig sind oder nur solche Sprungstellen haben, bei denen die Differenz zwischen linksseitigem und rechtsseitigem Grenzwert endlich ist. 92 5.3. Monte Carlo Integration = Nf2 + 2 N X N X f ·f i=1 j=i+1 = Nf2 +2 N X (N − i)f i=1 2 2 = Nf2 + N f − Nf 2 2 (5.8) Setzt man nun Gleichung 5.8 in Gleichung 5.7 ein, ergibt sich die Varianz der Monte Carlo Integration: * !2 + N b−aX (b − a)2 2 2 2 f (xi ) − I = f − f = σM C N i=1 N Die Varianz der Monte Carlo Integration ist also proportional zu N1 und der Varianz des Integranden, der Fehler skaliert folglich mit √1N . Um die Ergebnisse der Monte Carlo Integration zu verbessern, bieten sich also zwei Möglichkeiten. Entweder vergrößert man die Stichprobenmenge oder man versucht die Varianz des Integranden zu reduzieren. 5.3.1. Importance Sampling √ Da der Fehler invers proportional zu N ist, wird eine (weitere) Erhöhung der Stichprobenzahl ineffektiver, die Reduktion der Varianz des Integranden scheint also der vielversprechendere Ansatz zu sein. Hierzu betrachtet man beispielsweise eine Funktion mit einem schmalen Peak: Wird diese Funktion nun mit Monte Carlo Integration 1 f(x) 0,8 y 0,6 0,4 0,2 0 a x b Abbildung 5.4.: Ein Beispiel einer für Importance Sampling geeigneten Funktion, viele x ∈ [a, b] liefern keinen relevanten Beitrag zum Integral und einer gleichverteilten Menge an Stützstellen ausgewertet, werden viele Auswertungen der Funktion an kaum zum Integral beitragenden Stellen vorgenommen. Als 93 5. Numerische Integration Folge davon steigt die Zahl der notwendigen Stützstellen um ein gutes Ergebnis zu erzielen. Es liegt also nahe, statt der Gleichverteilung eine gewichtete Verteilung zu verwenden, die die Stützstellen in den Teilen des Intervalls [a.b] häuft, die die größten Beiträge zum Integral liefern. Z b Z b Z b f (x) f˜(x)g(x) f (x)dx = g(x) = g(x) a a a Durch Verwendung einer Verteilungsfunktion g(x) 6= 1 erhält man nun einen neuen Integranden f˜(x), ohne dabei den analytischen Wert des Integrals zu ändern. Für die Varianz der Monte Carlo Integration hingegen ändert sich einiges. Sei g(x) nun eine Funktion, die den Verlauf von f (x) grob wiedergibt. f (x) |εn(x)| 1 1 + εn(x) f (x) f˜(x) = = 1 + εn(x) g(x) g(x) := Für die Varianz des neuen Integranden in der g-Verteilung ergibt sich dann (wieder unter Ausnutzung der Linearität der Varianz): E2 E D D 2 2 ˜ ˜ σf˜ = f (x) − f (x) g g 2 = (1 + εn(x)) g − h1 + εn(x)i2g 2 = 1 + 2εn(x) + ε2 n2 (x) g − 1 + ε hn(x)ig = 1 + 2ε hn(x)ig + ε2 n2 (x) g − 1 − 2ε hn(x)ig − ε2 hn(x)i2g = ε2 n2 − n2 = ε2 σn2 Für |εn(x)| 1 folgt daraus σf2˜ σf2 . Beschreibt g(x) den Verlauf der Funktion also ausreichend gut, lässt sich mit Hilfe des Importance Samplings der Fehler der Integration deutlich verringern. f˜(x) hat zwar nicht mehr viel mit f (x) zu tun, die “verlorenen“ Informationen sind dafür jetzt aber in der Verteilungsfunktion enthalten. Beispiel 5.4. Ein einfaches Beispiel zur Veranschaulichung der Monte Carlo Integration ist die Berechnung von π. Hierzu betrachet man ein Quadrat mit Kantenlänge 1 und einem Viertelkreis mit Einheitsradius dort drin. Die Flächeninhalte ergeben sich dann als A = 1 und A◦ = π/4. Aus der vorangegangenen Betrachtung des Integrals in Gleichung 5.5 folgt: Z 1Z 1 A◦ = f (x, y)dy dx = A f 0 94 0 5.3. Monte Carlo Integration 1 falls x2 + y 2 ≤ 1 f (x, y) = 0 sonst Schätzt man den Mittelwert nun mittels Monte Carlo Integration ab, ergibt sich: f= N 1 X f (x, y) N i=1 π' N 4 X f (x, y) N i=1 95 6. Bestimmung von Nullstellen Die Bestimmung von Nullstellen ist ein wichtiges Element in der Numerik, da neben den offensichtlichen Anwendungsmöglichkeiten beispielsweise auch die Lösung nichtlinearer Gleichungssysteme mit einigen dieser Methoden möglich ist. Diese wiederum können zusammen mit den Integrationsverfahren aus dem vorherigen Kapitel dazu verwendet werden um Algorithmen zu konstruieren, die auch nichtlineare Diffentialgleichungen lösen können. Im Folgenden sollen deswegen einige Verfahren zur Bestimmung von Nullstellen von Funktionen und ein paar ihrer Anwendungsmöglichkeiten vorgestellt werden. 6.1. Einfache Algorithmen zur Nullstellensuche 6.1.1. Intervallhalbierungsverfahren Für eine Funktion f : R → R, die in einem Intervall [a0 , b0 ] stetig ist und einen Vorzeichenwechsel vollführt, ergibt sich aus dem Zwischenwertsatz die Existenz einer Nullstelle in diesem Intervall: ∃ z ∈ [a0 , b0 ] : f (z) = 0. Auf Basis dieser Eigenschaft lässt sich nun ein simpler Algorithmus zur iterativen Bestimmung der Nullstelle konstruieren. Satz 6.1 (Eigenschaften des Intervallhalbierungsverfahren) Für ein Startintervall I0 = [a0 , b0 ] auf dem die stetige Funktion f ihr Vorzeichen wechselt, bestimmt man den Mittelpunkt z0 = (a0 + b0 )/2. Je nachdem ob das Vorzeichen links oder rechts von z0 wechselt, wählt man für den nächsten Iterationschritt das neue Intervall gemäß der Vorschrift ak + b k Ik = [ak , bk ] zk = 2 a = z falls f (ak−1 )f (zk−1 ) > 0 k k−1 bk = bk−1 mit ak = ak−1 bk = zk−1 falls f (bk−1 )f (zk−1 ) > 0 97 6. Bestimmung von Nullstellen und erhält auf diese Weise eine Folge zk , die gegen die echte Nullstelle z konvergiert (oder gegen eine echte, sofern mehrere in dem Intervall liegen). Hinzu kommt noch eine Nebenbedigung, die den Algorithmus sofort abbricht, falls zk die Nullstelle ist, andernfalls terminiert man den Algorithmus sobald eine vorgegebene Konvergenzschranke unterschritten wurde. Dabei gelten a0 ≤ a1 ≤ a2 ≤ . . . ≤ z ≤ . . . ≤ b1 ≤ b0 und (bk − ak ) = (b0 − a0 ) · 2−k . Daraus folgt dann auch die apriori-Fehlerabschätzung19 für zk : |zk − z| ≤ b 0 − a0 2k+1 Falls f auf I0 differenzierbar ist und 0 < m ≤ |f 0 (x)| ≤ M ∀ x ∈ I0 , gilt weiterhin der Zusammenhang 1 1 |f (zk )| ≤ |z − zk | ≤ |f (zk )| M m 3 2 f(x) y 1 0 -1 a1 -2 z1 b1 z0 a0 b0 -3 0 1 2 3 4 5 6 x Abbildung 6.1.: Das Intervalhalbierungsverfahren für eindimensionale reelle Funktionen, bei dem das Intervall, in dem sich die Nullstelle befindet, in jedem Iterationsschritt reduziert wird. Beweis. Da der Algorithmus und die apriori-Fehlerabschätzung einfach sind, wird nur die letzte Fehlerabschätzung bewiesen. Für diese verwendet man den Mittelwertsatz aus der Analysis: f (y) − f (x) = |f 0 (ξ)| ∀ x, y ∈ I0 ∃ ξ ∈ I0 mit y−x 19 (6.1) apriori bedeutet hier ohne Kenntnis der zk oder f (zk ), also eine Abschätzung der nötigen Iterationsschritte für eine gegebene Genauigkeit 98 6.1. Einfache Algorithmen zur Nullstellensuche Setzt man nun y = z (f (z) = 0) und x = zk ein und verwendet die obere und untere Schranke der Ableitung, erhält man die obige Abschätzung. |f (zk )| = |f 0 (ξ)| |z − zk | |f (zk )| ⇒m≤ ≤M |z − zk | |z − zk | 1 1 ≥ ≥ ⇒ m |f (zk )| M 1 1 ⇒ |f (zk )| ≥ |z − zk | ≥ |f (zk )| m M ⇒ Algorithmus 6.1 (Intervallhalbierungsverfahren) Gegeben sei eine Funktion f (x) auf dem Intervall [a, b] und ein Konvergenzkriterium T OL. Sofern f eine Nullstelle in diesem Intervall hat, lässt sich diese mit dem Intervallhalbierungs-Verfahren finden. while !T OL do z = (a + b)/2 if f (a)f (z) > 0 then a=z end if if f (b)f (z) > 0 then b=z end if z = (a + b)/2 end while 6.1.2. Fixpunkte und sukzessive Approximation Definition 6.1 (Lipschitz-Stetigkeit und Kontraktionen) Eine Funktion f heißt lipschitz-stetig auf [a, b], falls es ein q ∈ R gibt, für das gilt: |f (x) − f (y)| ≤ q|x − y| ∀ x, y ∈ [a, b] Für den mehrdimensionalen Fall werden die Beträge durch die Vektornormen der Ursprungs- und Bildräume ersetzt. Wenn q < 1 ist, bezeichnet man f als eine Kontraktion. 99 6. Bestimmung von Nullstellen Definition 6.2 (Fixpunkt) Für ein f : Rn → Rn nennt man z ∈ Rn einen Fixpunkt, falls f (z) = z gilt. Die Fixpunkte sind also die Schnittpunkte von f mit der Identitätsfunktion (oder im eindimensionalen Fall mit der Geraden g(x) = x). Um die Fixpunkte einer eindimensionalen Funktion zur Nullstellensuche benutzen zu können, ist also zuerst ein Algorithmus nötig, der eine gegen den Fixpunkt konvergierende Zahlenfolge liefert. Naheliegend ist der Ansatz zk+1 = f (zk ), von dessen Funktionalität man sich leicht anhand einer Skizze überzeugen kann. g(x) = x f(x) g(x) = x f(x) z2 z1 y y z3 z1 z2 z3 x x (a) (b) Abbildung 6.2.: Anwendung von zk +1 = f (zk ) zur Fixpunktbestimmung in unterschiedlichen Fällen. Die Pfeilfe in 6.2a zeigen den Verlauf mehrerer Iterationsschritte bei einer kontraktiven Abbildung, 6.2b stellt das Verhalten bei nicht kontraktiven Abbildungen dar. Satz 6.2 (Konvergenz und Fehlerabschätzung der Fixpunkt-Iteration) Sei G eine nichtleere, abgeschlossene Teilmenge von R und f : G → G eine kontraktive Abbildung. Dann existiert eine eindeutige Lösung für f (z) = z und die Folge zi+1 = f (zi ) konvergiert gegen dieses z. Weiterhin gelten die Fehlerabschätzungen: qi · |z1 − z0 | 1−q q |z − zi | ≤ · |zi − zi−1 | 1−q |z − zi | ≤ apriori aposteriori Beweis. Aus der Kontraktivität der Abbildung lässt sich eine Abschätzung für den aktuellen Iterationsschritt in Abhängigkeit vom vorangegangenen machen und durch mehrfache Anwendung dieser auch in Abhängigkeit vom ersten Iterationsschritt. |zi+1 − zi | = |f (zi ) − f (zi−1 )| ≤ q|zi − zi−1 | |zi+k − zi+k−1 | ≤ q k |zi − zi−1 | ≤ q k+i−1 |z1 − z0 | 100 6.1. Einfache Algorithmen zur Nullstellensuche Betracht man den Abstand zwischen zwei nicht direkt aufeinanderfolgenden Iterationen, lässt sich dieser abschätzen, indem man die Zwischenschritte als konstruktive Nullen hinzuaddiert und dann die Dreiecksungleichung des Betrags anwendet. |zi+k − zi | ≤ |zi+k − zi+k−1 | + |zi+k−1 − zi+k−2 | + . . . + |zi+1 − zi | q |zi − zi−1 | ≤ q + q 2 + . . . + q k |zi − zi−1 | ≤ 1−q Ist die Folge nun konvergent(zi → z), sieht man, dass für k → ∞ aus dem letzten Ausdruck die zweite Fehlerabschätzung folgt. Setzt man in den letzten Ausdruck den zuvor für |zi+k −zi+k−1 | gefundenen ein, erhält man: |zi+k − zi | ≤ q i−1 q |zi − zi−1 | ≤ q |z1 − z0 | 1−q 1−q Falls die Folge konvergent ist, ergibt sich im Grenzwert k → ∞ die erste Fehlerabschätzung. Die Konvergenz selber ergibt sich aus der selben Formel, da sie impliziert, dass die zi eine Cauchy-Folge sind. Demzufolge existiert ein z ∈ G mit zi → z. Daraus folgt dann f (z) = f (limi→∞ zi ) = limi→∞ f (zi ) = limi→∞ zi+1 = z. Aus diesem Satz ergibt sich dann der simple Algorithmus der Fixpunkt-Iteration. Algorithmus 6.2 (Fixpunkt-Iteration) Sei G eine nichtleere, abgeschlossene Teilmenge von R und f : G → G eine kontraktive Abbildung. Dann lässt sich die Lösung für f (z) = z unter Verwendung eines Startwertes x ∈ G und eines Konvergenzkriteriums T OL mit dem folgenden Algorithmus finden. while !T OL do x = f (x) end while √ Beispiel 6.1. Die Berechnung von n kann man beispielsweise mit der Fixpunkt2 Iteration der Funktion fn (x) = 1 + x − xn durchführen. Wie man leicht erkennen √ kann, ist der Fixpunkt dieser Funktion z = n. Wählt man nun n = 3 und G = [1, 2], ergibt sich die Ableitung als f 0 (x) = 1 − 32 x, womit die Ableitung auf dem Intervall G durch − 31 ≤ f 0 (x) ≤ 13 beschränkt ist und der 101 6. Bestimmung von Nullstellen Betrag demzufolge ≤ so erhält man 1 3 ist. Verwendet man nun den Mittelwertsatz (Gleichung 6.1, 1 |f (x) − f (y)| ≤ |x − y| 3 (6.2) und hat somit die Konvergenz in diesem Intervall sichergestellt, da fn (x) dort eine Kontraktion ist. Führt man die Iteration nun explizit aus, sehen die Ergebnisse wie folgt aus. z0 = 1 z1 = 1.666 . . . z2 = 1.74 . . . z3 = 1.73 . . . .. . 6.1.3. Newtonverfahren Auf Basis des Fixpunktverfahrens lässt sich auch ein iteratives Verfahren zur Bestimmung von Nullstellen einer Funktion f entwickeln, das sogenannte Newton-Verfahren. Die Nullstellen einer beliebigen stetig differenzierbaren Funktion f (x) sind gegeben durch die Fixpunkte der Abbildung g(x) = x − µ1 f (x) mit einem geeigneten µ 6= 0. Sei I = [c − ρ, c + ρ] die Umgebung einer Nullstelle z mit c ≈ z und µ = f 0 (c) (6= 0). Aus der Bedingung für Lipschitz-Stetigkeit (Definition 6.1) im Grenzwert x → y |g(x) − g(y)| ≤ q|x − y| ∀ x, y ∈ I ⇔ |g 0 (x)| ≤ q ∀ x ∈ I ergibt sich, dass g(x) eine Kontraktion ist, falls |g 0 (x)| ≤ q < 1 ∀ x ∈ I erfüllt ist. Dies ist äquivalent zu: 0 f (x) = 1 · |f 0 (c) − f 0 (x)| ≤ q < 1 1 − (6.3) f 0 (c) |f 0 (c)| Satz 6.3 (Konvergenz des Newton(-Raphson)-Verfahrens) Für eine kontraktive Abbildung g(x) = x− µ1 f (x) auf dem Intervall I = [c+ρ, c−ρ], das die echte Nullstelle z der stetig differenzierbaren Funktion f (x) enthält, konvergiert die Folge xi gemäß der Vorschrift xi+1 = g(xi ) = xi − 102 f (xi ) f 0 (c) 6.1. Einfache Algorithmen zur Nullstellensuche für jeden Startwert x0 ∈ I gegen z. Eine Fehlerabschätzung des Verfahren ergibt: q q f (xi−1 ) |xi − z| ≤ |xi − xi−1 | = 1−q 1 − q f 0 (c) q i f (x0 ) qi |x1 − x0 | = |xi − z| ≤ 1−q 1 − q f 0 (c) Beweis. Wählt man ρ ausreichend klein, lässt sich Gleichung 6.3 aufgrund der Stetigkeit von f 0 (x) lokal immer erfüllen. Da g(x) dann eine kontraktive Abbildung auf dem kompletten Intervall ist, ergibt sich unter Verwendung von Satz 6.2 daraus sofort die lokale Konvergenz des Newton-Verfahrens auf dem Intervall I. Aus dem Satz zur Fixpunkt-Iteration folgen auch die Fehlerabschätzungen. In der Praxis setzt man sinnvollerweise c = xi , da hierdurch der Grenzwert der Fixpunkt-Iteration nicht geändert wird, xi im Gegensatz zu c aber vorab bekannt ist. Mit diesem Konvergenz-Resultat können wir nun den dazugehörigen Algorithmus aufschreiben. Algorithmus 6.3 (Newton-Verfahren) Für eine kontraktive Abbildung g(x) = x − µ1 f (x) auf dem Intervall I = [c + ρ, c − ρ], das die echte Nullstelle z der stetig differenzierbaren Funktion f (x) enthält, konvergiert der nachfolgende Algorithmus gegen diese Nullstelle. T OL ist ein geeignetes Konvergenzkriterium. while !T OL do x = x − f (x)/f 0 (x) end while Ist die Ableitung von f (x) nicht als analytischer Ausdruck verfügbar oder ihre Implementierung nicht sinnvoll, so bietet es sich an, die Ableitung durch einen Differenzenquotienten der letzten beiden Iterationsschritte zu approximieren. xi+1 = xi − f (xi ) f (xi )−f (xi−1 ) xi −xi−1 Das Newton-Verfahren hat auch eine recht anschauliche grafische Interpretation. Sei yi (x) die Tangente der Funktion an der Stelle der i-ten Iteration, dann folgt daraus: yi (x) := f (xi ) + f 0 (xi ) · (x − xi ) 103 6. Bestimmung von Nullstellen f (xi ) − xi = 0 ⇒ yi (xi+1 ) = f (xi ) + f (xi ) · xi − 0 f (c) 0 Das Ergebnis des nächsten Iterationsschritts ist also die Nullstelle der Tangente der vorhergehenden Iterierten. y f(x) yi yi+1 0 xi x i+1 x Abbildung 6.3.: grafische Darstellung des Newtonverfahrens und der Interpretation der Iterierten als Nullstellen der Tangenten 6.2. Nichtlineare Gleichungssysteme Das Newton-Verfahren funktioniert auch im mehrdimensionalen Fall um die Nullstellen einer Funktion f : Rn → Rn zu finden. Die Grundlage dafür ist der Banachsche Fixpunktsatz, eine Verallgemeinerung des Spezialfalls aus Satz 6.2. Für eine Funktion f : Rn → Rn und eine reguläre n × n-Matrix A gilt aufgrund der Invertierbarkeit von A: Af (x) = 0 ⇐⇒ f (x) = 0 ⇒ z = g(z) mit g(x) = x − Af (x) Findet man also einen Fixpunkt von g(x), ist dieser auch eine Nullstelle von f (x). Satz 6.4 (Fixpunktsatz von Banach) Sei f : Rn → Rn eine stetig differenzierbare Funktion in einer Umgebung Kρ (c) eines Punktes c, der in der Nähe einer Nullstelle der Funktion liegt, und es gebe eine reguläre Matrix A ∈ Rn×n sodaß: Kρ (c) = {x ∈ Rn : kx − ck ≤ ρ} kE − Af 0 (x)k ≤ q < 1 ∀ x ∈ Kρ (c) 104 (6.4) 6.3. Nullstellen von Polynomen Hierbei sei E die Einheitsmatrix und k·k kontextabhängig entweder eine Vektornorm oder eine mit der gewählten Vektornorm verträgliche Matrixnorn (es gilt kBxk ≤ kBk kxk für alle B und x). Dann besitzt die Funktion g(x) = x − Af (x) auf Kρ (c) exakt einen Fixpunkt z und das Iterationsschema xk+1 = xk − Af (xk ) konvergiert für jeden Startwert x0 ∈ Kρ gegen dieses z. Die Fehler des Verfahrens sind gegeben durch: qk kx1 − x0 k 1−q q kxk − xk−1 k kxk − zk ≤ 1−q kxk − zk ≤ Beweis. Aus der Definition von g(x) und Gleichung 6.4 ergibt sich: kg 0 (x)k = kE − Af 0 (x)k ≤ q < 1 (6.5) Aus dem Mittelwertsatz (Gleichung 6.1) folgt, dass es für alle x, y ∈ Kρ (c) ein ξ ∈ Kρ (c) gibt, sodaß: kg(x) − g(y)k = kg 0 (ξ) · (x − y)k Norm-Verträglichkeit ⇒ ≤ kg 0 (ξ)k · kx − yk 6.5 ⇒ ≤ q · kx − yk Daraus folgt, dass g(x) eine kontraktive Abbildung ist und der Rest des Beweises erfolgt analog zum eindimensionalen Fall in Satz 6.2. Dem eindimensionalen Verfahren folgend, wählt man in der Praxis die inverse Ableitung der Funktion an der aktuellen Position. −1 Ak = (f 0 (xk )) −1 ⇒ xk+1 = xk − (f 0 (xk )) · f (xk ) 6.3. Nullstellen von Polynomen Um die Nullstellen eines Polynoms pn (x) = vorgestellte Newton-Verfahren nutzen. Pn i=0 ai xi zu finden, lässt sich das zuvor (t) (t+1) xj = (t) xj − pn (xj ) (t) p0n (xj ) 105 6. Bestimmung von Nullstellen Die Subskripte sind hierbei der Index der Nullstelle und die Superskripte geben den Iterationsschritt an. In jedem Schritt werden also das Polynom selbst und seine erste Ableitung an der aktuellen Iterationsstelle benötigt. Für eine effiziente Berechnung des Polynoms bietet sich wieder das bereits bekannte Horner-Schema an. pn (x) = n X ai x i i=0 = (. . . ()(an x + an−1 )x + an−2 ) . . . + a2 )x + a1 )x + a0 Für ein festes x∗ kann das Horner-Schema aber auch verwendet werden, um die Werte der Ableitungen an dieser Stelle zu bestimmen. Dafür wird zuerst ein neuer Satz Koeffizienten benötigt. (0) ai := ai a(1) n := an (1) (1) (0) ai := aj+1 x∗ + aj ∗ → pn (x ) = ∗ ((a(0) n x | + {z j = n − 1, n − 2, . . . 0 (0) an−1 )x∗ (1) (0) + an−2 )x∗ + . . . } an−1 | {z } (1) an−2 (1) Daraus folgt dann für den letzten Koeffizienten a0 = pn (x∗ ) := r0 . Auf Basis dieser neuen Koeffizienten lässt sich nun ein Polynom vom Grad n − 1 konstruieren, dass mit pn (x) zusammenhängt. pn−1 (x) := n−1 X (1) aj+1 xj = j=0 n X (1) aj xj−1 j=1 pn (x) = (x − x∗ )pn−1 (x) + r0 P Um den zweiten Zusammenhang zu zeigen, fasst man die rechte Seite als nj=0 bj xj zusammen und führt einen Koeffizientenvergleich durch. Unter Verwendung der vorherigen Definitionen der neuen Koeffizienten ergibt sich dann: (0) bn = a(1) n = an (1) (1) (0) bj = aj − aj+1 x∗ = aj (1) (1) 0<j<n (1) (0) b0 = r0 − a1 x∗ = a0 − a1 x∗ = a0 (0) ⇒ bj = aj 106 ∀j 6.3. Nullstellen von Polynomen Dieses Vorgehen lässt sich nun mit pn−1 (x) analog fortsetzen: pn (x) = (x − x∗ )pn−1 (x) + r0 pn−1 (x) = (x − x∗ )pn−2 (x) + r1 .. . pn−j (x) = (x − x∗ )pn−j−1 (x) + rj .. . rj := Pn−j (x∗ ) (6.6) p1 (x) = (x − x∗ )p0 (x) + rn−1 p0 (x) = rn Setzt man die Ausdrücke für die verschiedenen Polynome jetzt in pn (x) ein, lässt sich dieses in Abhängigkeit der rj formulieren. pn (x) = r0 + (x − x∗ )pn−1 (x) = r0 + (x − x∗ )r1 + (x − x∗ )2 pn−2 (x) = ... n X = rj · (x − x∗ )j j=0 Diese Darstellung entspricht einer Taylorentwicklung von pn (x) an der Stelle x∗ und legt die Vermutung nahe, dass die rj den Ableitungen des Polynoms an der Stelle x∗ entsprechen. Satz 6.5 (Ableitungen von Polynomen im Horner-Schema) Für die zuvor definierten pj (x) und rj gelten die folgenden Eigenschaften. rj = 1 dj pn (x = x∗ ) j! dxj 0≤j≤n rj+1 = pn−j−1 (x∗ ) = p0n−j (x = x∗ ) (6.7) (6.8) Durch eine Erweiterung des Horner-Schemas lassen sich diese Koeffizienten auf effiziente Weise bestimmen. Beweis. Stellt man pn (x) bis zum Index j − 1 als die oben gezeigte Taylorentwicklung dar und den Rest mit pn−j (x) und bildet dann die j-te Ableitung, erhält man Gleichung 6.7. pn (x) = j−1 X rk (x − x∗ )k + pn−j (x) · (x − x∗ )j k=0 107 6. Bestimmung von Nullstellen dj pn (x) = 0 + pn−j (x) · j! + (x − x∗ )(p0n−j (x) · j! + . . .) j dx x = x∗ ⇒ dj pn (x = x∗ ) = pn−j (x∗ ) · j! dxj Aus der Definition von rj = pn−j (x∗ ) folgt dann die Behauptung. Die Gleichung 6.8 ergibt sich aus Gleichung 6.6 und den rj : pn−j (x) = (x − x∗ )pn−j−1 (x) + rj ⇒ pn−j (x) − pn−j (x∗ ) = (x − x∗ )pn−j−1 (x) pn−j (x) − pn−j (x∗ ) pn−j−1 (x) = x − x∗ pn−j−1 (x∗ ) = p0n−j (x∗ ) x → x∗ Oder anders ausgedrückt: pk (x∗ ) = p0k+1 (x∗ ). Mit diesen Eigenschaften lassen sich (j) nun neue Koeffizienten ak wie folgt definieren. (Die Fälle j = 0 und j = 1 wurden bereits zuvor behandelt.) pn−j := n X (j) ak xk−j k=j ⇒ (0) ak = ak für j = 0, . . . n − 1 a(j+1) = a(j) n n = an (0) (j+1) ak (j+1) = ak+1 x∗ + ak (j) k = n − 1, . . . j (j+1) rj = aj (0) rn = a(j) n = an Mit diesen Haufen an Koeffizienten lässt sich nun abschließend das Horner-Schema um ein paar Stufen erweitern, um alle Ableitungen von pn (x) an der Stelle x∗ zu (j) erhalten, wie es in Abbildung 6.4 dargestellt ist. Die Koeffizienten ak sind also jene, die für die Bildung des Polynoms Pn−j notwendig sind und die rj sind die Reste, die beim Abspalten des Faktors (x − x∗ ) aus diesem Polynom übrig bleiben. 108 6.3. Nullstellen von Polynomen k =n−1 k=n (0) an (j = 1) an (j = 2) an .. . (0) = (j = 0) → = (1) (2) → (n) → (n) an−1 k=0 (0) ... ... → ... → a1 ↓ (1) a1 ↓ (2) a1 (0) → a0 ↓ (1) a0 = r0 = pn (x∗ ) = r1 = p0n (x∗ ) = rn−1 = an an−1 ↓ (1) an−1 ↓ (2) an−1 .. . k=1 rn Abbildung 6.4.: erweitertes Horner-Schema zur Bestimmung aller Ableitungen an einer festen Stelle x∗ , für die Bildungsvorschrift der Koeffizienten siehe Satz 6.5 109 7. Extrema und nichtlineare Optimierung Neben den im vorherigen Kapitel diskutierten Nullstellen einer Funktion sind oft auch die Extrema eine interessante Größe. Beispielsweise ist der Grundzustand physikalischer Systeme charakterisiert durch die minimale Gesamtenergie. Ein weiteres großes Anwendungsgebiet von Optimierungsalgorithmen ist die Lösung linearer Gleichungssysteme, die ja, wie bereits gezeigt, äquivalent zu einer quadratischen Minimierungsaufgabe sind. In diesem Kapitel wollen wir uns deswegen mit zwei nichtlinearen20 Algorithmen zur Lösung von quadratischen Minimierungsproblemen beschäftigen: Steepest Descent und der erweiterten Version Conjugate Gradients. Im Gegensatz zu den anderen Kapiteln werden (Matrix-gewichtete) Skalarprodukte hier als xT y bzw. xT Ay statt in Bra-Ket-Notation geschrieben, da wir es hier mit vielen Ableitungen dieser zu tun haben. 7.1. Steepest Descent Wir haben im Kapitel zu den Grundlagen linearer Gleichungssysteme bereits gesehen, wie man lineare Gleichungssysteme in ein quadratisches Minimierungsproblem umformulieren kann (Satz 2.2). Nun wollen wir allgemeiner werden und zunächst beliebige quadratische Funktionen im Rn minimieren. 1 f (x) = xT Ax + bT x + c 2 0 f (x) = xT A + bT 20 Die Bezeichnung “nichtlinear” bezieht sich hier nicht auf die zu untersuchende Funktion, sondern auf die Arbeitsweise des Algorithmus. Bei den linearen Abstiegsverfahren (Abschnitt 2.3) sind die Suchrichtungen fest vorgegeben und werden nicht verändert, die hier vorgestellten Verfahren haben hingegen vom Startpunkt des aktuellen Schrittes abhängige Suchrichtungen. 111 7. Extrema und nichtlineare Optimierung f 00 (x) = A Wenn A eine symmetrische, positiv definite Matrix ist, dann hat diese Funktion exakt ein Minimum.21 Da wir ein iteratives Verfahren konstruieren wollen, brauchen wir also wieder einen beliebigen Startpunkt x0 , dessen Umgebung wir dann modellieren können um eine optimale Suchrichtung zu finden. Ein erster Ansatz ist eine TaylorEntwicklung um x0 bis zur zweiten Ordnung22 , wobei wir als Variable den Abstand zum Startpunkt p = x − x0 verwenden. 1 mx0 (p) = f (x0 ) + f 0 (x0 )p + pT f 00 (x0 )p 2 0 0 T 00 mx0 (p) = f (x0 ) + p f (x0 ) (7.1) Wenn wir dieses Modell nun minimieren wollen, muss m0x0 (p)h = 0 ∀ h ∈ Rn gelten und daraus folgend m0x0 (p) = 0. 0 = f 0 (x0 ) + pT f 00 (x0 ) ⇒ p = −(f 00 (x0 ))−1 (f 0 (x0 ))T Wir brauchen für dieses Modell also die Inverse der zweiten Ableitung. Eine quadratische Funktion ließe sich dadurch zwar in einem Schritt lösen, aber die Inversenbestimmung ist meist sehr kostspielig, weswegen wir als Alternative ein einfacheres Modell wählen werden.. Baut man auf Basis dieses Modells jedoch einen Algorithmus, kommt man wieder beim Newtonverfahren an (Nullstellensuche bei der Ableitung). Als Optimierungsverfahren bietet es den Vorteil einer lokal quadratischen Konvergenz, aber ist für uns hier nicht weiter von Interesse. Weil uns uns der quadratische Term der Taylor-Entwicklung stört, wir aber andererseits auch ein quadratische Modell für eine sinnvolle Minimierungsaufgabe brauchen, liegt es nahe, die Taylor-Entwicklung nur bis zur ersten Ordnung durchzuführen und für den quadratischen Term eine möglichst einfache Annahme zu treffen. 1 mx0 (p) = f (x0 ) + f 0 (x0 )p + pT p 2 0 0 T mx0 (p) = f (x0 ) + p 21 Die Aussage, dass ein Polynom m-ten Grades maximal m − 1 Extrema haben kann, gilt auch im mehrdimensionalen Fall und da xT Ax > 0 ∀ x ∈ Rn gilt, muss das eine mögliche Extremum also ein Minimum sein. 22 Eine Taylor-Entwicklung einer quadratischen Funktion bis zur zweiten Ordnung mag an dieser Stelle unsinnig wirken, aber wenn man die Verfahren auf beliebige Funktionen verallgemeinern will, wird diese Modellbildung wichtig. 112 7.1. Steepest Descent T ⇒ p = − (f 0 (x0 )) = −(Ax0 + b) = −∇f (x0 ) {z } | (7.2) in euklidischer Norm Dieses Modell lässt sich nun auf einfache Weise lösen. Außerdem fällt auf, dass die Suchrichtung in Richtung des negativen Gradienten zeigt, also der Richtung des stärksten Abfalls, daher der Name “Steepest Descent”. Weil wir aber nicht mehr die exakte quadratische Funktion berücksichtigen, erhalten wir auf diese Weise nur die Suchrichtung, nicht aber die optimale Schrittweite α∗ um die eigentliche Funktion f (x0 + αp) entlang dieser aus dem Modell gewonnenen Richtung zu minimieren. 1 f (x0 + αp) = (x0 + αp)T A(x0 + αp) + bT (x0 + αp) + c 2 α2 1 = xT0 Ax0 + αxT0 Ap + pT Ap + bT (x0 + αp) + c 2 2 d f (x0 + αp) = xT0 Ap + αpT Ap + bT p dα d ! f (x0 + α∗ p) = 0 dα (Ax0 + b)T p 7.2 pT p ⇒ α∗ = − = T pT Ap p Ap Damit haben wir alle notwendigen Komponenten zusammen und können den kompletten Algorithmus unter Verwendung der euklidischen Norm (siehe 7.2) formulieren. Algorithmus 7.1 (Steepest Descent) Gegeben sei eine quadratische Funktion f (x) = xT Ax + bT x + c mit einer symmetrischen, positiv definiten Matrix A, ein Startvektor x0 und ein geeignetes Konvergenzkriterium TOL. Letzteres kann beispielsweise die Änderung des Funktionswerts zwischen zwei Schritten sein oder bei der Anwendung zur approximativen Lösung linearer Gleichungssysteme der Betrag des Residuums rk := Axk − b. Dann findet das folgende iterative Verfahren das Minimum dieser Funktion. while !TOL do pk = −∇f (xk−1 ) αk = (pTk pk )/(pTk Apk ) xk = xk−1 + αk pk end while Bemerkung. Zwei aufeinanderfolgende Suchrichtungen des Steepest Descent sind immer orthogonal zu einander. Weil im vorherigen Schritt entlang des eindimensionalen affinen Unterraums der von pk−1 aufgespannt wird, minimiert wurde, muss der 113 7. Extrema und nichtlineare Optimierung nächste Gradient (und damit auch pk ) senkrecht dazu sein, weil sonst die Minimierungsbedingung für α nicht erfüllt gewesen wäre. Der große Vorteil dieses Algorithmus ist, dass er nur mit n2 pro Iterationsschritt skaliert und meist nach deutlich weniger als n Schritten abgebrochen werden kann. Andererseits minimieren wir in jedem Schritt nur in einem eindimensionalen affinen Unterraum. Dies führt zu einer eher bescheidenenen Konvergenzrate in der Nähe des Minimums. Anschaulich lässt sich dies im R2 zeigen, hier führt die Orthogonalität aufeinanderfolgender Suchrichtungen zu einem Zick-Zack-Kurs und deswegen nur kleinen Schritten in der Nähe des Minimums. 0.4 Steepest Descent 0.38 0.36 0.34 0.32 0.3 0.35 0.4 0.45 0.5 Abbildung 7.1.: Veranschaulichung der Konvergenzproblematik des Steepest Descent im R2 7.2. Conjugate Gradients Es wäre für die Konvergenz des Steepest Descent vorteilhaft, wenn wir die Suchrichtungen so bestimmen könnten, dass wir in jedem Schritt das Minimum in dem affinen Unterraum, der von allen bisheringen Suchrichtungen aufgespannt wird, finden. Dieser Ansatz führt uns zur Optimalitätsbedingung. Satz 7.1 (Optimalitätsbedingung) Sei Uk ein Unterraum von Rn und xk ein Minimum der quadratischen Funktion f (x) = 1/2xT Ax + bT x + c in Uk (f 0 (xk )uk = 0 ∀ uk ∈ Uk ). Sei weiterhin p Aorthogonal zu Uk (pT Auk = 0 ∀ uk ∈ Uk ) und xk+1 = xk + αp das Minimum von f (xk + αp). Dann ist xk+1 ein Minimum auf dem ganzen Unterraum Uk+1 , der Uk erweitert um den Basisvektor p ist. Beweis. Schreiben wir ein beliebiges Element uk+1 = uk +βp können wir damit zeigen: f 0 (xk + αp)uk+1 = (A(xk + αp) + b)T (uk + βp) 114 7.2. Conjugate Gradients = (Axk + b)T uk + α pT Auk +β (A(xk + αp) + b)T p | {z } =0 = 0 +β f (x )u | {zk }k xk Minimum in Uk f 0 (xk+1 )p | {z } xk+1 Minimum entlang p = 0 ∀ uk+1 ∈ Uk+1 Folglich sind also Suchrichtungen, die A-orthogonal zueinander sind, optimal für unser Problem. Um diese bestimmen zu können, müssen wir uns allerdings zuerst mit Projektionen auf Unterräume und ihren Eigenschaften beschäftigen um ein geeignetes Orthogonalisierungsverfahren zu finden. Definition 7.1 (Projektoren auf Unterräume) Sei W ⊂ Rn ein echter Teilraum von Rn (also W 6= Rn ), A eine symmetrische, positiv definite Matrix und sei {ω1 , ω2 . . . ωm } mit m < n eine vollständige OrthonormalbaP sis bezüglich A in W . (Das heißt jedes w ∈ W kann eindeutig als w = m i=1 αi ωi T dargestellt werden und ωi Aωj = δi,j .) Dann nennt man P : Rn → W n X Px = ωjT Ax · ωj j=1 die A-orthogonale Projektion (oder Projektor) auf W und der zu W A-orthogonale Raum W ⊥ ist definiert als W ⊥ := y ∈ Rn : y T Aw = 0 ∀ w ∈ W . Satz 7.2 (Eigenschaften des Projektors) Sei W ⊂ Rn ein echter Teilraum von Rn , A eine symmetrische, positiv definite Matrix und {ω1 , ω2 . . . ωm } (m < n) ein vollständiges Orthonormalsystem in W . Dann besitzt P die A-orthogonale Projektion P auf W , definiert als P x = nj=1 ωjT Ax · ωj , folgende Eigenschaften: 1. P ist linear: P (ax + by) = aP x + bP y ∀ a, b ∈ R, x, y ∈ Rn . 2. Der Operator Q := E − P ist die Projektion auf W ⊥ . 3. P ist eindeutig durch W bestimmt, die genaue Wahl des Orthogonalsystems spielt keine Rolle. 4. P ist selbstadjundiert: P † = P . 5. P ist idempotent: P 2 = P . 115 7. Extrema und nichtlineare Optimierung Beweis. Behauptung 1: Aus der Linearität des Skalarprodukts xT A(y + z) = xT Ay + xT Az ergibt sich sofort die Linearität des Projektors. Behauptung 2: Sei y := Qx = (E − P )x = x − P x für ein beliebiges x ∈ Rn und w ∈ W ebenfalls beliebig. Zu zeigen ist, dass y T Aw = 0 unabhängig von der Wahl von x und w gilt. ! m X y T Aw = (x − P x)T A αj ωj j=1 = m X αj xT Aωj − (P x)T Aωj j=1 = m X αj xT Aωj − j=1 = m X m X wiT Ax ωiT Aωj | {z } i=1 =δi,j αj xT Aωj − wjT Ax j=1 =0 0 } ein zweites vollständiges Orthonormalsystem in W Behauptung 3: Sei {ω10 , ω20 . . . ωm P 0 0 0 0 bezüglich A mit dem A-orthogonalen Projektor P 0 x = m i=1 ωi Ax·ωi und Q = E−P . Folglich ist P 0 x ∈ W und Q0 x ∈ W ⊥ ∀ x ∈ Rn . Weiterhin folgt aus der Bedingung P + Q = E = P 0 + Q0 : 0 = x − x = (P + Q)x − (P 0 + Q0 )x ⇒ (P − P 0 )x = (Q − Q0 )x | {z } | {z } ∈W ∈W ⊥ ⇒ (P − P 0 )x = 0 ⇒ P x = P 0 x ⇒ (Q − Q0 )x = 0 ⇒ Qx = Q0 x Folglich müssen die Projektoren also identisch sein und hängen also nicht von der Wahl des Orthonormalsystems ab, das W aufspannt. Behauptung 4: Zu zeigen ist (P x)T y = xT P y. (P x)T y = (P x)T (P + Q)y = (P x)T P y xT P y = ((P + Q)x)T P y = (P x)T P y Behauptung 5: Für ∀ x ∈ Rm gilt: P 2 x = P (P x) = P m X i=1 116 ! ωiT Ax · ωi 7.2. Conjugate Gradients = m X ωjT A m X i=1 j=1 = m m X X j=1 i=1 = m X ωiT Ax ·ωi · ωj | {z } ∈R ωiT Ax · ωj Aωi ·ωj | {z } =δi,j ωjT Ax · ωj = P x j=1 Mit Hilfe dieser Projektoren können wir nun ein Verfahren formulieren, mit dem wir in der Lage sind, eine gegebene Menge an linear unabhängigen Vektoren in Aorthonormale Vektoren zu transformieren. Satz 7.3 (Gram-Schmidt-Orthonormalisierung) Seien {u1 , u2 . . . um } linear unabhängige Vektoren in Rn und A ∈ Rn×n eine symmetrisch. positiv definite Matrix. Sei weiterhin Pi die A-orthogonale Projektion auf den Raum Wi = span {u1 , u2 . . . ui }. Dann stellt die Menge der {ωj }, gegeben durch die folgende Rekursionsvorschrift eine A-orthonormale Basis für diesen Raum Wi dar. v1 = u1 ω1 = v1 kv1 kA vi+1 = ui+1 − Pi ui+1 = ui+1 − i X ωkT Aui+1 · ωk k=1 ωi+1 vi+1 = kvi+1 kA Beweis. Der Beweis erfolgt über Induktion. Aus der linearen Unabhängigkeit folgt, dass u1 6= 0 ⇒ v1 6= 0 gilt und demzufolge ω1 wohldefiniert mit kω1 kA = 1 ist. Damit ist der Induktionsanfang bewiesen. Induktionsannahme : {ω1 , ω2 . . . ωj−1 } sind A-Orthonormalsystem Induktionsschluss : vj = uj − Pj−1 uj = (E − Pj−1 )uj ⊥ = Qj−1 uj ⇒ vj ∈ Wj−1 ⇒ vjT Aωk = 0 ∀ k = 1, 2 . . . j − 1 Damit ist vj A-orthogonal zu {ω1 , ω2 . . . ωj−1 } und aus der linearen Unabhängigkeit ergibt sich, dass Qj−1 uj 6= 0 gilt. Aus der Normierung folgt dann, dass {ω1 , ω2 . . . ωj } ein vollständiges A-orthonormales System für Wj ist. 117 7. Extrema und nichtlineare Optimierung Mit der Gram-Schmidt-Orthonormalisierung können wir uns jetzt nun wieder unserem ursprünglichen Problem zuwenden und den Steepest Descent-Algorithmus so modifizieren, dass er A-orthogonale Suchrichtungen hat. while !TOL do P T T pk = −∇f (xk−1 ) + k−1 p · p A∇f (x ) / p Ap i k−1 i i i i=1 αk = (pTk pk )/(pTk Apk ) xk = xk−1 + αk pk end while Aufgrund der Optimalitätsbedingung, die dieser Algorithmus erfüllt, muss das Minimum im Rn nach spätestens n Schritten gefunden sein, allerdings ergibt sich die Problematik, dass jeder Schritt der Rechnung teurer wird als der vorherige, weil gegen alle vorherigen Suchrichtungen orthogonalisiert werden muss. Durch eine genauere Betrachtung der zu berechnenden Skalarprodukte lässt sich diese Problematik aber glücklicherweise umgehen. pTi A∇f (xk−1 ) = = = = = αi (Api )T ∇f (xk−1 ) αi 1 (Axi − Axi−1 )T ∇f (xk−1 ) αi 1 (Axi − Axi−1 + b − b)T ∇f (xk−1 ) αi 1 (Axi + b)T ∇f (xk−1 ) − (Axi−1 + b)T ∇f (xk−1 ) αi 1 (∇f (xi ))T ∇f (xk−1 ) − (∇f (xi−1 ))T ∇f (xk−1 ) αi Aus der Optimalitätsbedingung wissen wir: f 0 (xk−1 )uk−1 = 0 ∀ uk−1 ∈ Uk−1 = span {p1 , p2 . . . pk−1 } = uTk−1 ∇f (xk−1 ) Nun sind die pi aber gerade die Gram-Schmidt-orthogonalisierten Gradienten und spannen folglich denselben Unterraum wie diese auf. uk−1 = k−1 X i=1 ⇒ k−2 X i=0 118 γi (∇f (xi ))T ∇f (xk−1 ) = 0 δi pi = k−2 X i=0 γi ∇f (xi ) 7.2. Conjugate Gradients ⇒ (∇f (xi ))T ∇f (xk−1 ) = 0 ∀ i < k − 1 ⇒ k−1 T X p A∇f (xk−1 ) i i=1 pTi Api · pi = (∇f (xk−1 ))T ∇f (xk−1 ) · pk−1 αk−1 · pTk−1 Apk−1 (∇f (xk−1 ))T ∇f (xk−1 ) pTk−1 Apk−1 · T · pk−1 pTk−1 Apk−1 pk−1 pk−1 (∇f (xk−1 ))T ∇f (xk−1 ) = · pk−1 pTk−1 pk−1 = Folglich liefert also nur die vorherige Suchrichtung einen nichtverschwindenen Beitrag zur A-Orthogonalisierung und die Berechnung der Suchrichtung vereinfacht sich zu: pk = −∇f (xk−1 ) + (∇f (xk−1 ))T ∇f (xk−1 ) ·pk−1 pTk−1 pk−1 | {z } :=βk Nun haben wir alles zusammen um eine effiziente Version des CG-Algorithmus zu formulieren. Algorithmus 7.2 (Conjugate Gradients) Gegeben seien eine quadratische Funktion f (x) = xT Ax + bT x + c mit einer symmetrische, positiv definiten Matrix A, ein Startvektor x0 und ein geeignetes Konvergenzkriterium. Dieses kann zum Beispiel die Änderung des Funktionswerts zwischen zwei Schritten sein oder bei der Anwendung zur approximativen Lösung linearer Gleichungssysteme der Betrag des Residuums rk := Axk − b. Dann findet das folgende iterative Verfahren das Minimum dieser Funktion. p0 = 0 while !TOL do βk = [(∇f (xk−1 ))T ∇f (xk−1 )]/[pTk−1 pk−1 ] pk = −∇f (xk−1 ) + βk pk−1 αk = (pTk pk )/(pTk Apk ) xk = xk−1 + αk pk end while Dieser Algorithmus hat als teuerste Operation eine Matrix-Vektor-Multiplikation und skaliert deswegen mit n2 pro Schritt. Meist bleibt man mit der Anzahl der Schritte nun deutlich unter n um eine gute Näherung des Minimums zu finden und bleibt so deutlich unter der n3 Laufzeit einer direkten Lösung. 119 7. Extrema und nichtlineare Optimierung 0.4 Steepest Descent Conjugate Gradients 0.38 0.36 0.34 0.32 0.3 0.35 0.4 0.45 0.5 Abbildung 7.2.: Veranschaulichung der Konvergenz der Conjugate Gradients Methode im R2 7.2.1. Preconditioning Die Konvergenz der Steepest Descent und Conjugate Gradients Verfahren lässt sich mittels Preconditioning verbessern. Statt dem euklidischen Skalarprodukt für den quadratischen Term des Modells (Gleichung 7.1) kann man auch jedes andere Matrixinduzierte Skalarprodukt xT M y benutzen. Wenn M einfach zu invertieren ist, lässt sich auf diese Weise die Konvergenz deutlich beschleunigen. Die Konvergenzgeschwindigkeiten der Conjugate Gradients mit und ohne Preconditioning sind: p κ(A) − 1 ohne Preconditioning: kxk+1 − xk k ≤ p kxk − xk−1 k κ(A) + 1 p κ(M −1 A) − 1 mit Preconditioning: kxk+1 − xk k ≤ p kxk − xk−1 k κ(M −1 A) + 1 Wählt man M also so, dass die Kondition23 κ von M −1 A deutlich kleiner ist als die von A selbst, dann kann man die nötige Schrittzahl zum Erreichen der Konvergenz deutlich verringern. Die Herleitung der Preconditioned Conjugate Gradients erfolgt analog zum hier gezeigten Fall, nur mit dem Unterschied, dass der Gradient nicht mehr die Transponierte der Ableitung ist, sondern ∇f (x) = M −1 f 0 (x)T . Außerdem sind die Gradienten dann M -orthogonal zueinander, statt im euklidischen Sinne senkrecht zueinander. Auf einen Beweis dieser Konvergenz-Resultate wird hier verzichtet und stattdessen auf die Literatur verwiesen. Eine ausführliche Diskussion der Konvergenzrate der CG-Algorithmen findet sich beispielsweise in [2, Seite 122 ff.]. 23 Die Kondition einer Matrix ist der größte Eigenwert geteilt durch den kleinsten. 120 8. Eigenwertprobleme Die Bestimmung von Eigenwerten ist ein allgegenwärtiges Problem in der Physik, ein bekanntes Beispiel ist der Hamilton-Operator aus der Quantenmechanik, dessen Eigenwerte die Energien der Zustände sind. Deswegen beschäftigen wir uns zuerst in diesem Kapitel mit der Potenzmethode, einem simplen Verfahren zur Bestimmung des größten Eigenwertes einer Matrix24 . Anschließend wird noch das HouseholderVerfahren diskutiert, das die Matrix in eine Tridiagonalmatrix umformt. In dieser Form lassen sich die Eigenwerte dann auf einfache Weise bestimmen. Im Allgemeinen ist ein Eigenwert λi ∈ C einer Matrix A ∈ Cn×n definiert über Ayi = λi yi wobei yi ∈ Cn den dazugehörigen Eigenvektor darstellt. In diesem Kapitel werden wir uns auf selbst-adjundierte (“hermitesche”) Matrizen konzentrieren, weil diese für physikalische Anwendungen am wichtigsten sind. Aus der Eigenschaft hAx| yi = hx| Ayi ergibt sich, dass die Eigenwerte alle reell sind und die zugehörigen Eigenvektoren ein Orthogonalsystem bilden.25 Diese beiden Eigenschaften lassen sich mit den Eigenschaften des komplexen Skalarprodukts schnell beweisen. hAyi | yi i = hyi | Ayi i∗ ⇒ hyi | yi i λ = hyi | yi i∗ λ∗ hyi | yi i λ = hyi | yi i λ∗ ⇒ λ = λ∗ Für die Orthogonalität der Eigenvektoren betrachten wir zwei verschiedene Eigenvektoren x und y mit Eigenwerten λ 6= µ: Ay = λy Ax = µx 24 Das Beispiel mit dem Hamilton-Operator kann man oft in ein äquivalentes Problem umformen, bei dem der Grundzustand dem größten Eigenwert entspricht. 25 Beispielsweise sind alle Observablen in der Quantenmechanik selbst-adjundiert, weil die Eigenwerte, die physikalische Größen darstellen, reell sein müssen. 121 8. Eigenwertprobleme hx| Ayi = λ hx| yi = hAx| yi = µ∗ hx| yi = µ hx| yi ⇒ λ hx| yi = µ hx| yi µ 6= λ ⇒ hx| yi = 0 Es kann aber auch mehrere orthogonale Eigenvektoren zu einem Eigenwert geben, in diesem Falle spricht man von “entarteten Eigenwerten”. 8.1. Die Potenzmethode Die Potenzmethode ist ein iteratives Verfahren, bei dem die Matrix, deren Eigenwerte bestimmt werden sollen, wiederholt auf einen Vektor angewendet wird. Da die Eigenvektoren ein vollständiges Orthogonalsystem bilden, kann jeder Vektor als Linearkombination dieser geschrieben werden. Durch mehrfache Anwendung der Matrix bekommt jeder Eigenvektor eine Potenz seines Eigenwertes als Vorfaktor und nach genügend vielen Iterationen liefert nur noch der Vektor zum größten Eigenwert einen relevanten Beitrag. Wir beschränken uns bei der Beweisführung hier auf den Fall nicht-entarteter Eigenwerte. Satz 8.1 (Konvergenz der Potenzmethode) Sei A ∈ Cn×n selbstadjundiert und seien alle Eigenwerte λi ≥ 0. Seien ferner ωj die normierten Eigenvektoren, Aωj = λj ωj und kωj k = 1. Dann gilt für jedes x(0) ∈ Cn mit Ax(0) 6= 0: 1. Die Folge y (t) , die definiert ist durch die Folge x(t) , x(t+1) = Ax(t) y (t+1) Ay (t) x(t) x(t+1) Ax(t) = (t+1) = = kx k kAx(t) k kAy (t) kx(t) kk Ay (t) = kAy (t) k konvergiert gegen den Eigenvektor ωmax von A, der zum größten Eigenwert gehört. 2. Die Folge der Quotienten ρ(x(t) ) = (t) x Ax(t) kx(t) k 2 konvergiert gegen den dazugehörigen (größten) Eigenwert λmax . 122 8.1. Die Potenzmethode 3. Die Folge Ay (t) ist monoton steigend und konvergiert ebenfalls gegen λmax . Im Allgemeinen ist weder die Folge x(t) noch ihre Norm konvergent, für λmax > 1 geht x(t) → ∞. Beweis. Behauptung 1: Es seien die Eigenwerte der Größe nach sortiert: λ1 > λ2 > . . . > λn ≥ 0. Da die Eigenvektoren ein vollständiges Orthogonalsystem sind, schreiben wir den Ausgangsvektor x(o) in dieser Basis: x (0) = n X αj = ωj x(0) ∈ C αj ωj j=1 ⇒ Ax (0) =A n X αj ωj = n X j=1 αj λj ωj 6= 0 j=1 Da Ax(0) 6= 0 nach Vorraussetzung gilt, dürfen nicht alle αj = 0 sein. Sei m nun der Index des größten Eigenwerts λm := λ > 0 mit nicht-verschwindenen Koeffizienten: αj λj = 0 ∀ j < m. Daraus folgt dann, dass das Verfahren unter diesen Voraussetzungen nicht kollabieren kann. x(t) = At x(0) = n X αj λtj ωj 6= 0 j=1 In der Summe liefern alle Terme j < m keinen Beitrag, wodurch sich die Folgenelemente schreiben lassen als: t n X λj (t) t t αj ωj x = λm αm ωm + λm λ m j=m+1 | {z } :=r(t) t = λ αm ωm + r (t) r(t) ist der zu ωm orthogonale Anteil von x(t) : * n + X λ t (t) j ωm r = ωm αj ωj λ j=m+1 t n X λj = αj hωm | ωj i = 0 λ j=m+1 Da λ der größte Eigenwert ist, können wir die Größe des Restglieds nun abschätzen. q := max j>m λj <1 λ 123 8. Eigenwertprobleme t n n X X λj t r = αj ωj ≤ q αj ωj λm j=m+1 j=m+1 n X (t) t→∞ ⇒ r ≤ q t αj ωj −→ 0 (t) j=m+1 Daraus folgt nun schließlich für die Folge y (t) : λt (αm ωm + r(t) ) x(t) = kx(t) k λt kαm ωm + r(t) k αm ωm + r(t) t→∞ αm ωm = −→ kαm ωm + r(t) k kαm ωm k ωm = ωm = kωm k y (t) = Ob αm negativ ist, spielt hier keine Rolle, da −ωm genauso gut als Eigenvektor geignet ist wie ωm . Behauptung 2: (t) (t) Ax(t) x x x(t) (t) = ρ = A 2 kx(t) k kx(t) k kx(t) k = y (t) Ay (t) y (t) → ωm ⇒ ρ(t) → hωm | Aωm i = hωm | λωm i = λ Behauptung 3: (t) 2 (t) Ay = Ay Ay (t) = y (t) A2 y (t) (t) 2 (t) (t) y A y ⇒ Ay = kAy (t) k Ay (t) (t) = y A kAy (t) k (t) = y Ay (t+1) Mit der Cauchy-Schwarz-Ungleichung lässt sich dies nun nach oben abschätzen: (t) (t) (t+1) Ay ≤ y · Ay | {z } =1 (t+1) = Ay Damit ist der monotone Anstieg der Folge gezeigt. Die Konvergenz folgt dann aus der Konvergenz der y (t) → ωm : (t) t→∞ Ay −→ kAωm k = kλωm k = λ 124 8.1. Die Potenzmethode Algorithmus 8.1 (Potenzmethode) Sei A ∈ Cn×n selbstadjundiert und seien alle Eigenwerte λi ≥ 0. Gegeben sei weiterhin ein Startvektor x(0) mit Ax(0) 6= 0. Dann konvergiert die Potenzmethode gegen den größten Eigenwert, dessen zugehöriger Eigenvektor nicht orthogonal zu dem Startvektor ist. T OL ist hier wie üblich ein geeignetes Konvergenzkriterium, beispielsweise die Änderung der Eigenwert-Approximation im aktuellen Schritt. y (0) = x(0) / x(0) λ(0) = Ay (0) while !T OL do y (t+1) = Ay (t) / Ay (t) λ(t+1) = Ay (t) end while Für den Fall negativer Eigenwerte kann man die Potenzmethode auf A2 anwenden um den beträgsmäßig größten Eigenwert zu finden. Wenn die |λj | in absteigender Reihenfolge sortiert, ergibt sich analog zum vorherigen Fall: Ax(0) 6= 0 ⇒ A2 x(0) 6= 0 x(2t) = A2t x(0) = (A2 )t x(0) Aus Satz 8.1 folgt dann sofort für y (t) = y (2t) → u x(t) kx(t) k : kuk = 1 A2 u = λ2 u wobei λ der betragsmäßig größte Eigenwert ist. Weiterhin folgt daraus: kAuk2 = hAu| Aui = u A2 u = λ2 ⇒ kAuk = |λ| Damit lässt sich nun zeigen, dass die Zwischenschritte y (2t+1) ebenfalls gegen normierte Eigenvektoren von A2 konvergieren: Ay (2t) Au → := v (2t) kAy k kAuk Au A2 u λ2 u A2 v = A2 =A =A kAuk kAuk kAuk y (2t+1) = = λ2 v 125 8. Eigenwertprobleme Bemerkung. Die Potenzmethode ist identisch mit der Methode der sukzessiven Approximation (Satz 6.2) zur Bestimmung von Fixpunkten der Abbildung g(y) = Ay kAyk sukz. Approx. : y (t+1) = g(y (t) ) Fixpunkt von g(y) : g(y0 ) = y0 Ay0 ⇔ = y0 kAy0 k ⇔ Ay0 = kAy0 k y0 Folglich ist y0 ein Eigenvektor von A und kAy0 k der dazugehörige Eigenwert. 8.2. Householder-Verfahren Das Householder-Verfahren ist eine Ähnlichkeitstransformation, die eine gegebene hermitesche Matrix A in Tridiagonalform bringt. Für diesen Spezialfall lässt sich die Determinante auf einfache Weise rekursiv bestimmen. In der Praxis wird die Matrix schrittweise durch Anwendung von Householder-Matrizen in die gewünschte Form gebracht. Die eigentliche Ähnlichkeitstransformationsmatrix ist dann das Produkt dieser Matrizen. Definition 8.1 (Ähnlichkeitstransformation) Die Transformation B := T −1 AT mit einer regulären Matrix T ∈ Cn×n wird als Ähnlichkeitstransformation bezeichnet. Satz 8.2 (Eigenwert-Invarianz bei Ähnlichkeitstransformationen) Die Matrix B = T −1 AT besitzt dieselben Eigenwerte λi wie A und die Eigenvektoren sind T −1 yi . Falls A hermitesch (A = A† ) und T unitär (T −1 = T † ) sind, ist B ebenfalls hermitesch. Beweis. Die Eigenwert-Problematik lässt sich als “charakteristische Polynom” formulieren. Ay = λy ⇔ (A − λE)y = 0 (y 6= 0) ⇔ det(A − λE) = 0 Die Eigenwerte sind folglich die Nullstellen dieses Polynoms. Um zu zeigen, dass die Eigenwerte identisch sind, reicht es also zu zeigen, dass die charakteristischen Polynome gleich sind. det(B − λE) = det(T −1 AT − λE) 126 8.2. Householder-Verfahren = det(T −1 (A − λE)T ) = |det{z T −1} · det(A − λE) · =1 (T unitär) det | {zT} =1 (T unitär) = det(A − λE) Um die Eigenvektoren von B zu bestimmen, nehmen wir einen Eigenvektor y von A und setzen ihn in die Behauptung ein. B(T −1 y) = T −1 AT T −1 y = T −1 Ay = λ(T −1 y) Abschließend müssen wir noch zeigen, dass B hermitesch ist, falls A hermitesch ist und T unitär. B † = (T −1 AT )† = T † A† (T −1 )† = T −1 AT = B Um die Eigenwerte von A zu bestimmen, können wir folglich die Matrix mittels einer Ähnlichkeitstransformation in eine einfacher auszuwertende Form bringen. Deswegen wollen wir diese hermitesche Matrix nun in Tridiagonalform bringen: 0 δ1 γ2∗ ... γ δ 2 2 A → B = T −1 AT = .. .. ∗ . γn . 0 γn δn Um dieses Ziel zu erreichen, werden wir das Verfahren in n − 1 Iterationsschritte aufteilen und in jedem Schritt eine Spalte und Zeile der Matrix in die gewünschte Form bringen. In Gleichung 8.1 ist J (j−1) ∈ C j−1×j−1 der Teil von A, der im aktuellen Iterationsschritt bereits die richtige Form hat und aj ist die Spalte, die im aktuellen Schritt transformiert werden soll. A(j−1) = J (j−1) c 0 c† δj a†j 0 aj Ã(j) (8.1) 127 8. Eigenwertprobleme mit: J (j−1) c† 0 ... c = γ2 δ2 .. .. . . γj∗ δj 0 γj δj δ1 γ2∗ Um unserem Ziel einen Schritt näher zu kommen, brauchen wir also eine Transformation, die den Vektor aj auf seine erste Achse transformiert. Die Lösung für dieses Problem sind die “Householder-Matrizen”. Definition 8.2 (Householder-Matrix) Eine Matrix T := E − 2uu† mit einem u ∈ Cn , kuk = 1 wird als Householder-Matrix bezeichnet. Satz 8.3 (Eigenschaften von Householder-Matrizen) Eine Householder-Matrix T := E − 2uu† ist unabhängig von der Wahl des normierten Vektors u hermitesch und unitär. Beweis. T T = (E − 2uu† )(E − 2uu† ) = E 2 + 4u |{z} u† u u† − 4uu† =kuk2 =1 = E + 4uu† − 4uu† = E ⇒ T −1 = T T † = E − (2uu† )† = E − 2(u† )† u† = E − 2uu† = T ⇒ T † = T = T −1 Um zu sehen, wie diese Matrizen eine Hilfe bei der gesuchten Transformation sein können, betrachten wir zunächst die Wirkung auf einen beliebigen Vektor x ∈ Cn , den wir in einen einen zu u parallelen Anteil xk und den orthogonalen Rest x⊥ aufteilen: x† u = xk x = xk + x⊥ x† u = 0 ⊥ ⇒ T x = (E − 2uu† )(xk + x⊥ ) = xk + x⊥ − 2 u xk | {z } =xk 128 k 8.2. Householder-Verfahren = x⊥ − xk Die erfolgte “Spiegelung” des zu u parallelen Anteils von x zeigt, dass die Wirkung von T einer Spiegelung des Vektors an der zu u orthogonalen Hyperebene entspricht. Durch eine passende Wahl von u können wir x auf die erste Achse transformieren und so unser ursprüngliches Problem der Tridiagonalisierung lösen. Gesucht ist also ein u, sodass T x = kê1 mit einem k ∈ C gilt. Zuerst leiten wir einen Zusammenhang zwischen k und x her, und überzeugen uns mithilfe der Eigenschaften hermitescher Matrizen und des komplexen Skalarprodukts davon, dass hx| T xi eine relle Größe ist. kT xk2 = hT x| T xi = x T 2 x = hx| xi = kxk2 ⇒ k 2 ke1 k2 = k 2 = kxk2 ⇒ |k| = kxk hx| T xi = hxT | xi = (hx| T xi)∗ ⇒ hx| T xi = hx| kê1 i ∈ R Schreiben wir die erste Komponente von x nun in Polarkoordinaten x1 = |x1 | eiα , so können wir mithilfe der eben gezeigten Eigenschaft von hx| T xi das k bestimmen: ! k hx| ê1 i = k |x1 | e−iα = (k hx| ê1 i)∗ ⇒ k |x1 | e−iα = k ∗ |x1 | eiα k 2 = |k|2 e2iα ⇒ k = ± |k| eiα = ± kxk eiα Welches Vorzeichen die sinnvollere Wahl ist, lässt sich hier noch nicht erkennen, weswegen wir vorerst beide Vorzeichen-Möglichiekten berücksichtigen. Schauen wir uns nun die Wirkung von T etwas genauer an, können wir erste Informationen darüber gewinnen, wie u aussehen muss: ! T x = (E − 2uu† )x = x − 2u(u† x) = kê1 ⇒ x − kê1 = 2u hu| xi x − kê1 ⇒u= 2 hu| xi Da u nach Vorraussetzung ein normalisierter Vektor ist, folgt daraus noch: u= x − kê1 kx − kê1 k 129 8. Eigenwertprobleme ⇒ kx − kê1 k = 2 hu| xi Betrachtet man nun das Betragsquadrat des Normalisierungsfaktors von u, ergibt sich welche der beiden Vorzeichenwahlen für k die sinnvollere ist. kx − kê1 k2 = x ∓ kxk eiα ê1 n X iα 2 + |xj |2 = x1 ∓ kxk e j=2 = |x1 | eiα ∓ kxk eiα + . . . = |x1 | ∓ kxk + . . . In diesem Term kann die Wahl des Pluszeichens bei der Definition von k zu numerischen Auslöschungen führen, diese Gefahr besteht bei der Wahl des Minuszeichens jedoch nicht. Daher wählt man k = − kxk eiα . Aus dieser Wahl folgt dann: 2 |x1 − k|2 = |x1 | + kxk = kxk2 + 2 kxk · |x1 | + |x1 |2 n X ⇒ kx − kê1 k2 = |x1 − k|2 + |xj |2 j=2 = kxk2 + 2 kxk · |x1 | + n X |xj |2 j=1 2 = 2 kxk + 2 kxk · |x1 | Nun könnten wir aus diesem Ausdruck die Wurzel ziehen um unseren Skalierungsfaktor für u zu gewinnen. Alternativ dazu können wir aber auch direkt 2uu† betrachten, welches wir für die Konstruktion von T brauchen. x − kê1 kx − kê1 k (x − kê1 )(x − kê1 )† ⇒ 2uu† = 2 kx − kê1 k2 1 = · (x + kxk eiα ê1 ) · (x + kxk eiα ê1 )† kxk (kxk + |x1 |) u= (8.2) Somit haben wir nun eine Householder-Matrix konstruiert, die einen Vektor auf die erste Achse transformiert, und können uns wieder dem Ausgangsproblem aus Gleichung 8.1 widmen. Suchen wir u nun so aus, dass T̃ (j) aj = kê1 gilt, können wir damit 130 8.2. Householder-Verfahren eine Transformationsmatrix für A(j−1) definieren. T (j) = E 0 0 0 1 0 0 0 T̃ (j) = (T (j) )−1 (8.3) (T (j) )−1 A(j−1) T (j) = A(j) = J (j−1) c 0 c† δj a†j T̃ (j) 0 T̃ (j) aj T̃ (j) Ã(j) T̃ (j) Aufgrund der Konstruktion von T haben wir mit dieser Transformation nun auch die j-te Zeile und Spalte in Form einer Tridiagonalmatrix gebracht. Nun kann man das Verfahren so oft wiederholen, bis die komplette Matrix tridiagonal ist. Sobald dies geschehen ist, lässt sich das charakteristische Polynom relativ einfach bestimmen und aus diesem dann mit geeigneten Algorithmen (siehe Kapitel 6) die Eigenwerte errechnen. 0 δ1 − µ γ2∗ ... γ2 δ − µ 2 ϕ(µ) := det .. .. . . γn∗ 0 γn δn − µ Diese Determinante kann man nun durch Entwicklung nach der letzten Spalte rekursiv berechnen: δ1 − µ γ2∗ 0 . γ2 δ2 − µ . . ϕi (µ) := det .. .. ∗ . . γi 0 γi δi − µ = (δi − µ) · ϕi−1 (µ) − γi∗ γi · ϕi−2 (µ) 131 8. Eigenwertprobleme Algorithmus 8.2 (Householder-Verfahren) Gegeben sei eine hermitesche Matrix A, deren Eigenwerte bestimmt werden sollen. Die verwendete Notation für die Matrixelemente ist in Gleichung 8.1 zu finden. A(0) = A ϕ0 (µ) = 1 ϕ−1 (µ) = 0 for j = 1, 2 . . . n − 1 do bestimme T (j) gemäß Gleichung 8.3 und Gleichung 8.2 A(j) = T (j) A(j−1) T (j) ϕj (µ) = (δj − µ) · ϕj−1 (µ) − γi∗ γj · ϕj−2 (µ) end for ϕn (µ) = (δn − µ) · ϕn−1 (µ) − γn∗ γn · ϕn−2 (µ) bestimme die Nullstellen von ϕn (µ) um die Eigenwerte zu erhalten Hat man die Eigenwerte schließlich gefunden, lassen sich auch noch die Eigenvektoren bestimmen. Hierzu setzt man die nun bekannten Eigenwerte in das ursprüngliches LGS (A − µE)x = 0 ein und erhält so das LGS: (A − λi )yi = 0 Der Lösungsvektor von diesem LGS ist dann der zu dem Eigenwert gehörende Eigenvektor. 132 9. Matrix-Inversion Die Inversion von Matrizen ist ein Problem in der Numerik, das man meist versucht zu umgehen, da die diese Berechnungen schnell sehr teuer werden (kubisch skalierende Laufzeit). Lineare Gleichungssysteme löst man lieber mit intelligent gewählten Transformationen (siehe Gaußsches Eliminationsverfahren) oder Zerlegungen der Matrix, wie der QR-Zerlegung, die im folgenden vorgestellt werden soll. Außerdem wollen wir uns anschauen, wie diese Algorithmen erweitert werden können um damit im Bedarfsfall auch Inversen zu bestimmen. 9.1. Matrix-Inversion mit Gauß-Elimination In Kapitel 2 haben wir gezeigt, dass wir das Gauß-Eliminationsverfahren (Algorithmus 2.1) nutzen können um das lineare Gleichungssystem Ax = b mit einer regulären Matrix A zu lösen. Da A nach Voraussetzung regulär ist, muss also eine Inverse A−1 existieren, die die Bedingung A−1 A = AA−1 = E erfüllt. Dieses Gleichungssystem können wir durch eine spaltenweise Betrachtung auch als ein System von n Gleichungen der Form AA−1 i = êi ∀ i = 1, 2 . . . n schreiben. Diese Systeme sind aufgrund der Regularität von A eindeutig lösbar und wir wissen bereits wie wir diese Systeme direkt lösen können. Durch die Anwendung der Gauß-Elimination auf jedes dieser Systeme ergibt sich dann sofort der Invertierungs-Algorithmus. Der nötige Rechenaufwand lässt sich reduzieren, indem die für die das erste System bestimmte Transformation S (siehe Gleichung 2.2 und 2.3) wiederverwendet wird. Auf diese Weise lassen sich die folgenden n−1 Systeme auf eine quadratisch skalierende Matrix-Matrix-Multiplikation als teuerste Komponente 133 9. Matrix-Inversion reduzieren. Folglich skaliert dieses Verfahren dann immernoch mit n3 , statt mit n4 wie man es erwarten würde, wenn man jedes LGS alleine löst. Mit dieser Transformation ergibt sich die zu lösende Matrixgleichung als: SAA−1 = SE SAA−1 i = Si ∀ i = 1, 2 . . . n Algorithmus 9.1 (Matrix-Inversion mit Gauß) Gegeben sei eine reguläre Matrix A ∈ Cn×n und die kartesischen Einheitsvektoren êi des Cn . Dann lässt sich die Inverse A−1 mit AA−1 = E wie folgt berechnen: löse Ax = ê1 mit Gauß-Elimination um Dreieckstransformation S zu erhalten A1−1 = x B = SA for j = 2, 3, . . . n do for i = n, n − 1, . . . 1 do P xi = si,j − nk=i+1 bi,k xk /bi,i end for A−1 j = x end for Dieses Inversionsverfahren hat natürlich auch die Problematik der Fehlerfortpflanzung, die die Gauß-Elimination in großen Systemen aufweist. Deswegen sollte dieses Verfahren nur bei kleinen Matrizen eingesetzt werden und gegenenfalls die einzelnen Schritte mit Nachiterationen (siehe Abschnitt 2.2) korrigiert werden. 9.2. QR-Zerlegung und Matrixinversion Eine andere Möglichkeit zur Matrixinversion ist die QR-Zerlegung, bei der eine gegebene Matrix durch unitäre Transformationen in eine obere Dreiecksmatrix überführt wird. Das resultierende Produkt aus Transformationsmatrix und Dreiecksmatrix ist dann ein Spezialfall, der sich einfach invertieren lässt. a1,1 a1,2 . . . a1,n r1,1 r1,2 . . . r1,n a2,1 a2,2 . . . a2,n r2,2 . . . r2,n A= .. .. .. ... ... −→ QR = Q .. . . . . an,1 an,2 . . . an,n 0 rn,n 134 9.2. QR-Zerlegung und Matrixinversion Für die Transformation können die im vorherigen Kapitel eingeführten HouseholderMatrizen T benutzt werden, mit denen wir in der Lage sind Vektoren auf ihre erste Komponente zu transformieren. Weil wir mit jeder Anwendung einer HouseholderMatrix nur einen Vektor auf seine erste Komponente transformieren können, müssen wir ein iteratives Verfahren konstruieren, bei dem in jedem Schritt eine Spalte der Matrix A in die richtige Form gebracht wird. Angenommen, die ersten j Spalten sind bereits in die richtige Form gebracht, dann sieht unser Problem wie folgt aus: r1,1 r1,2 . . . r1,j b1,j+1 b1,j+2 . . . b1n r2,2 . . . r2,j b2,j+1 b2,j+2 . . . b2n .. .. .. .. .. .. . . . . . . ! 0 r b b . . . b R B j,j j,j+1 j,j+2 j,n (j) = A = (j) (j) (j) 0 Ã(j) ãj+1,j+1 ãj+1,j+2 . . . ãj+1,n (j) (j) (j) ãj+2,j+1 ãj+2,j+2 . . . ãj+2,n 0 .. .. .. .. . . . . (j) ãn,j+1 (j) ãn,j+2 ... (j) ãn,n Um dem Ziel einen Schritt näher zu kommen ist es nun also notwendig die erste Spalte von Ã(j) zu transformieren. Wie die Transformationsmatrix T̃ j ∈ Cn−j×n−j konstruiert werden muss, haben wir im vorherigen Kapitel (siehe Gleichung 8.2) bereits besprochen. Daraus ergibt sich dann sofort die Transformation T (j) für die gesamte Matrix: ! E 0 T (j) = 0 T̃ (j) r1,1 r1,2 . . . r1,j b1,j+1 b1,j+2 . . . b1n r2,2 . . . r2,j b2,j+1 b2,j+2 . . . b2n . . . . . . . . .. .. .. . . .. 0 r b b . . . b j,j j,j+1 j,j+2 j,n (j) (j) (j) T A =A = (j+1) (j+1) (j+1) ãj+1,j+1 ãj+1,j+2 . . . ãj+1,n (j+1) (j+1) 0 ãj+2,j+2 . . . ãj+2,n 0 .. .. .. .. . . . . 0 (j+1) ãn,j+2 (j+1) . . . ãn,n Nach diesem Schritt erfüllt die Spalte j + 1 nun ebenfalls die Bedingungen für eine obere Dreiecksmatrix und wir können dieses Schema wiederholen, bis alle Spalten in die richtige Form gebracht worden sind. (n−2) (n−3) R := A(n−1) = T T {z . . . T (0)} A(0) | :=Q−1 135 9. Matrix-Inversion Da jedes der verwendeten T (j) eine unitäre Matrix ist, ist die Gesamttransformation Q ebenfalls unitär. −1 −1 (1) −1 −1 . . . T (n−2) T = T (0) Q = T (n−2) T (n−3) . . . T (0) † † † † = T (0) T (1) . . . T (n−2) = Q−1 ⇒ Q† = Q−1 Aufgrund der einfachen Inversion von Q ist die QR-Zerlegung gut geeignet für die Lösung von linearen Gleichungssystemen. Ax = b → QRx = b ⇒ Rx = Q† b Da R eine Dreiecksmatrix ist, können wir dieses System analog zur Gauß-Elimination sofort gemäß der Vorschrift aus Gleichung 2.1 lösen. Durch Ausnutzung der speziellen Eigenschaften, die Q als unitäre Matrix hat, lässt sich die QR-Zerlegung noch deutlich vereinfachen und die explizite Berechnung der zur Herleitung verwendeten Householder-Matrizen vermeiden. Satz 9.1 (Iterationsvorschrift für QR-Zerlegung) Gegeben sei eine Matrix A ∈ Cn×n , dann lässt sich die QR-Zerlegung A = QR in eine unitäre Matrix Q und eine obere Dreiecksmatrix R mit folgender Iteration berechnen: Q̃k = Ak − k−1 X Qi · ri,k (9.1a) i=1 rj,k = hQj | Ak i ∀j < k 1 rk,k = Q̃k Qk = Q̃k rk,k (9.1b) (9.1c) Beweis. Zuerst folgt aus A = QR: Ak = k X Qi · ri,k [ri,k = 0 ∀ i > k] i=1 Die k-te Spalte von A ist also eine Linearkombination der ersten k Spalten von Q. Im Umkehrschluss muss dann auch Qk eine Linearkombination der ersten k Spalten von A sein. Mit der Definition Q̃k := rk,k Qk folgt daraus Gleichung 9.1a. 136 9.2. QR-Zerlegung und Matrixinversion Für die Berechnung der Elemente von R (Gleichung 9.1b und 9.1c) benötigt man die Eigenschaft von unitären Matrizen, dass ihre Spalten zueinander orthonormal26 sind. D E hQj | Qk i = δj,k ⇒ Qj Q̃k = 0 ∀j < k 0 = hQj | Ak i − k−1 X i=1 hQj | Qi i ri,k | {z } =δi,j ⇒ rj,k = hQj | Ak i hQk | Qk i = 1 D 1= ⇒ rk,k E Q̃k Q̃k r2 k,k = Q̃k = 2 Q̃k 2 rk,k Mit Hilfe dieser Rekursionsvorschrift können wir nun die QR-Zerlegung als Algorithmus zur Lösung von linearen Gleichungssystemem formulieren und basierend darauf auch eine erweitere Version zur Inversion von Matrizen. Algorithmus 9.2 (QR-Zerlegung für LGS) Gegeben sei ein lineares Gleichungsystem Ax = b mit A ∈ Cn×n und b ∈ Cn . Durch eine QR-Zerlegung von A = QR mit unitärem Q und einer oberen Dreiecksmatrix R lässt sich dieses LGS mit folgenden Algorithmus lösen: for k = 1, 2 . . . n do P Q̃k = Ak − k−1 i=1 Qi · ri,k for i = 1, 2 . . . k − 1 do rj,k = hQj | Ak i end for rk,k = Q̃k Qk = Q̃k /rk,k end for c = Q† b for k = n, n − 1 . . . 1 do P xk = ck − ni=k+1 rk,i xi /rk,k end for 26 Aus Q−1 = Q† ergibt sich Q† Q = E und damit die Bedingung Q†k Qj = δk,j . 137 9. Matrix-Inversion Erinnern wir uns nun daran, wie wir das Gauß’sche Eliminationsverfahren zu einem Matrixinversionsverfahren erweitert haben. Aus der Bedingung AA−1 = E haben wir die spaltenweise Bedingung AA−1 = êi hergeleitet. Nach der Bestimmung der i QR-Zerlegung von A erhalten wir damit die Matrixgleichung: QRA−1 = E ⇒ RA−1 = Q† † ⇒ RA−1 i = Qi ∀ i = 1, 2 . . . n Mithilfe der QR-Zerlegung bringen wir die Inversengleichung also in eine einfach berechenbare Form, da diese Gleichung nun für jede Spalte ohne weitere Umformungen lösbar ist. Algorithmus 9.3 (QR-Zerlegung für Matrixinversion) Gegeben sei eine reguläre Matrix A ∈ Cn×n . Die Inverse A−1 lässt sich mit folgendem Algorithmus berechnen: for k = 1, 2 . . . n do P Q̃k = Ak − k−1 i=1 Qi · ri,k for i = 1, 2 . . . k − 1 do rj,k = hQj | Ak i end for rk,k = Q̃k Qk = Q̃k /rk,k end for for k = 1, 2 . . . n do for i = n, . . 1 do i h n − 1 .P † −1 ai,k = Qi,k − nj=i+1 ri,j a−1 i,k /ri,i end for end for Bemerkung. Bei der QR-Zerlegung handelt es sich im Wesentlichen um eine GramSchmidt-Orthonormalisierung der Spalten von A. Die Spalten von Q sind nichts anderes als die orthonormalisierten Spaltenvektoren von A. 138 10. Lineare Regression In der Physik begegnet man oft Zusammenhängen, die sich zumindest lokal als linear voneinander abhängige Größen beschreiben lassen. s = αt + β Hierbei sind s und t die (Mess)Größen, α, β ∈ R sind die dazugehörigen Koeffizienten. Eine in einem Experiment gewonnene Messreihe mit den Datenpaaren {(ti , si )} , i = 1, 2 . . . m wird in der Praxis allerdings nie exakt diesem Idealverlauf folgen, sondern, bedingt durch Messfehler, um diesen herum verteilt sein. 25 25 Messdaten 15 10 5 0 Messdaten lineare Regression 20 s, si s, si 20 15 10 5 0 5 10 t, ti 15 20 (a) Messwerte mit einem linearen Zusammenhang 0 0 5 10 t, ti 15 20 (b) dieselben Messwerte mit einer linearen Regression Abbildung 10.1.: Beispiel-Verteilung von linear zusammenhängenden Messwerten (10.1a) und dieselbe Verteilung mit der Regressionsgerade (10.1b). Gesucht ist nun also ein Verfahren um die beiden Parameter α, β “optimal” aus den Messdaten zu bestimmen. Hierzu minimiert man meistens die quadratischen Abweichungen von der Fitfunktion s(ti ): 2 ∆ = = m X i=1 m X (si − s(ti ))2 (si − (αti + β))2 i=1 139 10. Lineare Regression Alternativ dazu können wir unser Regressionsproblem auch als ein lineares Gleichungssystem Ax = b schreiben: t1 1 s1 ! t2 1 s2 α A := .. .. b := .. x := β . . . tm 1 sm Daraus ergibt sich dann ∆2 = kAx − bk2 . Gesucht ist als das x, welches diesen Ausdruck minimiert. In der Praxis wird dieses Gleichungssystem überbestimmt und damit nicht lösbar sein. Daher kann man im Allgemeinen davon ausgehen, dass ∆2 > 0 gilt. Zuerst stellt sich die Frage, ob dieses Minimierungsproblem überhaupt eine eindeutige Lösung hat, da das LGS selbst keine Lösung hat. Um diese Frage zu beantworten, schauen wir uns nochmal die orthogonalen Projektoren P und Q an, die wir zuvor für die Gram-Schmidt-Orthonormalisierung verwendet haben. Zur Erinnerung: P x := k X hωi | xi ωi i=1 Qx := (E − P )x = x − k X hωi | xi ωi i=1 Hierbei sind die ωi die orthonormalen Basisvektoren des k-dimensionalen Unterraums in den, bzw. in dessen orthogonales Komplement, wir projizieren. Definition 10.1 (Abstand eines Vektors von einem Unterraum) Sei M ein Unterraum von Rm . Für einen beliebigen Vektor u ∈ Rm nennt man |u, M | := min ku − xk x∈M den Abstand des Vektors u zu M . Abbildung 10.2.: Veranschaulichung der Abstands-Definition im R3 mit M = R2 . Das x ∈ M , das die Abstandsdefinition erfüllt, beschreibt mit u − x die kürzeste Verbindung zwischen u und M . 140 Satz 10.1 (Eigenschaften des Abstandes) Sei P die orthogonale Projektion von u auf M ⊂ Rm und Q = E − P . Dann ist |u, M | = kQuk und das x ∈ M , welches zu diesem Minimum gehört, ist eindeutig bestimmt. Beweis. Sei v ∈ Rm beliebig, dann ist: kvk2 = hv| vi = hP v + Qv| P v + Qvi = hP v| P vi + hQv| Qvi = kP vk2 + kQvk2 Schreiben wir nun u − x = v mit u ∈ Rm und x ∈ M (daraus folgt P x = x, Qx = 0), so erhalten wir: ku − xk2 = kP u − xk2 + kQuk2 Weil kQuk unabhängig von der Wahl von x ∈ M ist, reduziert sich das Minimierungsproblem auf: min ku − xk = min kP u − xk x∈M x∈M Die Lösung ist offensichtlich x = P u und ergibt |u, M | = kQuk. Kommen wir nun wieder zurück zu zu unserem ursprünglichen Problem, das wir noch etwas verallgemeinern wollen (lineare Zusammenhänge zwischen beliebig vielen Größen): Zu einer gegebenen Matrix A ∈ Rm×n und einem gegebenen Vektor b ∈ Rm suchen wir einen Vektor y (min) ∈ Rn mit der Eigenschaft minn kAy − bk = Ay (min) − b y∈R Satz 10.2 (Lösbarkeit und Eindeutigkeit der linearen Regression) Für ein A ∈ Rm×n , b ∈ Rn , M := {x : x = Ay, y ∈ Rn } ⊂ Rm gilt: 1. Es gibt genau ein x(min) ∈ M mit (min) x − b = minn kAy − bk y∈R x min = Pb wobei P der orthogonale Projektor auf M ist. 141 10. Lineare Regression 2. Außerdem kann man das Problem in ein Gleichungssystem umformen: n X (min) (min) Ay hAk | Aj i yj − b = minn kAy − bk ⇔ hAk | bi = y∈R ∀ k = 1, 2 . . . n j=1 Dieses Gleichungssystem mit den Spaltenvektoren Ak von A ist immer lösbar. 3. Sind die Spalten der Matrix A linear unabhängig27 , dann ist das Gleichungssystem aus der vorherigen Behauptung eindeutig lösbar. 4. Bestimmt man zu den linear unabhängigen Spaltenvektoren {A1 , A2 . . . An } mit der Gram-Schmidt-Orthogonalisierung das Orthogonalsystem {v1 , v2 . . . vn } und das Orthonormalsystem {ω1 , ω2 . . . ωn }, dann sind die Lösungen des Ausgleichsproblems gegeben durch die Rekursion: yn(min) = (min) yk<n = 1 hωn | bi kvn k 1 kvk k n X hωk | bi − ! (min) yj hωk | Aj i j=k+1 Beweis. Behauptung 1 ergibt sich sofort aus Satz 10.1. Behauptung 2: a1,1 y1 + a1,2 y2 + . . . + a1,n yn .. Ay = . am,1 y1 + am,2 y2 + . . . + am,n yn = n X yi Ai ⇒ M = span {A1 , A2 . . . An } i=1 Aus der Behauptung 1 wissen wir auch bereits, dass gilt: (min) Ay − b = minn kAy − bk = x(min) − b y∈R ⇒ Ay (min) = x(min) = P b = (E − Q)b = b − Qb Da Qb ∈ M ⊥ ist, muss es orthogonal zu allen Ak sein, daraus wiederum folgt, dass Ay min − b = −Qb ebenfalls senkrecht zu allen Ak sein muss. 0 = Ak Ay (min) − b ∀ k = 1, 2 . . . n 27 Dies setzt m ≥ n voraus, was in der Praxis aber meistens erfüllt ist, da m der Anzahl an Datenpunkten entspricht und n die Anzahl der Parameter. 142 n + X (min) yi Ai − b Ak * = i=1 = n X (min) hAk | Ai i yi − hAk | bi i=1 Damit haben wir das Gleichungssystem aus der Behauptung und müssen uns nun nur noch über die Lösbarkeit Gedanken machen. Hierzu betrachten wir nochmal Ay (min) = P b. Da wir wissen, dass P b ∈ M gilt und M von den Spalten von A aufgespannt wird, folgt daraus: Pb = n X yi A j j=1 = Ay (min) = n X yi A i i=1 Folglich muss es also eine Lösung für Ay (min) = P b und damit auch für das Gleichungssystem, das wir daraus gewonnen haben, geben. Allerdings ist damit noch nicht garantiert, dass y (min) hierdurch eindeutig bestimmt ist. Behauptung 3: Für den Eindeutigkeitsbeweis nehmen wir an, dass es noch ein zweites ỹ (min) mit Aỹ (min) = P b gibt. Ay (min) − Aỹ (min) = P b − P b = 0 ⇒ 0 = A(y (min) − ỹ (min) ) n X (min) (min) = Aj (yj − ỹj ) j=1 (min) (min) Da nach Voraussetzung alle Aj linear unabhängig sind, muss yj − ỹj = 0 für alle Komponenten sein. Behauptung 4: Wir wissen bereits, dass Qb = b − Ay (min) ⊥ Aj ∀ j = 1, 2 . . . n ist. Wenn wir die Gram-Schmidt-Orthonormalisierung auf die Spalten von A anwenden, erhalten wir ein Orthonormalsystem {ω1 , ω2 . . . ωn }. Dieses spannt denselben Unterraum des Rm auf, wie die Spalten von A, woraus sowohl Qb ⊥ ωj ∀ j = 1, 2 . . . n als auch ωk ⊥ Aj ∀ j < k folgen. Qb = b − Ay (min) ⊥ ωk ⇒ 0 = ωk b − Ay (min) ∀ k = 1, 2 . . . n n X (min) 0 = hωk | bi − hωk | Aj i yj j=1 143 10. Lineare Regression Für k = n erhalten wir dann 0 = hωn | bi − n−1 X j=1 ⇒ yn(min) = (min) hωn | Aj i yj | {z } − hωn | An i yn(min) =0 hωn | bi hωn | An i und analog für k < n: 0 = hωk | bi − k−1 X j=1 (min) hωk | Aj i yj − (min) hωk | Ak i yk | {z } ⇒ (min) hωk | Aj i yj j=k+1 =0 " (min) yk − n X n X 1 (min) hωk | bi − hωk | Aj i yj = hωk | Ak i j=k+1 # Um nun die Rekursionsvorschrift zu beweisen, müssen wir nur noch zeigen, dass kvk k = hωk | Ak i gilt. Hierzu betrachten wir das Orthogonalsystem {v1 , v2 . . . vn }, welches aus der Gram-Schmidt-Orthogonalisierung gewonnen wurde. vk = Ak − k−1 X hωj | Ak i ωj j=1 ⇒ hωk | vk i = hωk | Ak i − k−1 X j=1 hωj | Ak i hωk | ωj i | {z } =0 da j<k hωk | vk i = hωk | Ak i ωk = hvk | vk i vk ⇒ = hωk | Ak i kvk k kvk k ⇒ kvk k = hωk | Ak i Setzt man dies nun in die vorherigen Formeln ein, so ergibt sich die zu beweisende Rekursionsformel. Mit diesem Existenz- und Eindeutigkeitsbeweis in Kombination mit einer Rekursionvorschrift können wir nun auch einen Algorithmus zur Lösung des linearen Ausgleichproblems formulieren. Algorithmus 10.1 (Lineare Regression) Gegeben seien n verschiedene Messgrößen s(i) , von denen m Messwerte der Form n o (1) (2) (n) (sj , sj . . . sj vorliegen. Die optimalen Koeffizienten28 α(i) (minimale Summe 28 Hierbei ist zu berücksichtigen, dass α(n) nicht zur Messgröße s(n) gehört, sondern der kostante Term in der Regressionsfunktion ist. 144 der quadratischen Abweichungen) für den linearen Zusammenhang s(n) = n−1 X α(i) s(i) + α(n) i=1 lassen sich durch Definition der Matrix A ∈ Rm×n und des Vektors b ∈ Rm mit folgender Rekursion berechnen: for i = 1, 2 . . . m do for j = 1, 2 . . . n − 1 do (j) ai,j = si end for ai,n = 1 (n) b i = si end for for i = 1, 2 . . . n do P vi = Ak − i−1 j=1 hωj | Ak i ωj ωi = vi / kvi k end for for i = n, 1 do n − 1 . . .P (i) α = hωi | bi − nj=i+1 α(j) hωi | Aj i / kvi k end for Für den einfachen Fall einer gleichförmigen Bewegung vom Anfang des Kapitels wollen wir noch ein paar interessante Eigenschaften der Regression demonstrieren. Gegeben war ein Zusammenhang s = αt + β für den wir ein y (min) = (α, β)T derart gefunden hatten, dass gilt: minn kAy − bk = Ay (min) − b y∈R Aus den Eigenschaften eines Minimums und der Positivität der Norm können wir sofort schlussfolgern: d 2 kAy − bk =0 ∀ k = 1, 2 . . . n dyk y=y (min) In der euklidischen Norm ergibt sich daraus: !2 m n X X d 0= ai,j yj − bi dyk i=1 j=1 y (min) 145 10. Lineare Regression =2 m n X X i=1 = ! (min) ai,j yj − bi n X · j=1 m X n X i=1 j=1 ! ai,j δj,k j=1 ! (min) ai,j yj − bi · ai,k ∀ k = 1, 2 . . . n (10.1) Was bedeutet dieses Ergebnis nun in der Praxis? Um diese Frage zu beantworten, betrachten wir zuerst den Fall k = n und übertragen die allgemeine Formulierung der Anschaulichkeit halber auf unser Beispiel. m X ⇒ i=1 m X bi = si = i=1 m X n X (min) ai,j yj i=1 j=1 m X s(ti ) = s̄ · m i=1 Die Mittelwerte der Mess- und Fitdaten sind also identisch. Und für k < n ergibt sich außerdem noch: m X bi ai,k = i=1 m X ⇒ si ti = m X n X (min) ai,k ai,j yj i=1 j=1 m X i=1 ti s(ti ) i=1 Die ersten Momente der Mess- und Fitdaten stimmen also ebenfalls überein. Für einen perfekten Fit würde si = s(ti ) ∀ i = 1, 2 . . . m gelten und damit ∆2 = 0 sein. In der Praxis wird dies jedoch nie auftreten und ∆2 , auch bekannt als Varianz der Residuen kann als Maß für die Güte der Regression verwendet werden. Ein weiteres Maß für die Güte ist das sogenannte “Bestimmtheitsmaß” R2 . Ausgehend von der Gesamtvarianz der Messwerte σ2 = m X m bi − b̄ 2 mit b̄ = i=1 = = m X 1 X bi m i=1 bi − (Ay (min) )i + (Ay (min) )i − b̄ i=1 m h X bi − (Ay (min) )i 2 2 + (Ay (min) )i − b̄ 2 i=1 i + 2 bi − (Ay (min) )i · (Ay (min) )i − b̄ 146 = ∆2 + σf2it + 2 m X bi − i=1 −2 i=1 | bi − ! (min) ai,j yj j=1 =0 ∀ k wegen 10.1 n X n X (min) ai,k yk k=1 {z | m X n X } ! (min) b̄ ai,j yj j=1 {z =0 wegen 10.1 } = ∆2 + σf2it definiert man das Bestimmtheitsmaß als: σf2it ∆2 R := 2 = 1 − 2 σ σ 2 Dieses wird sehr oft als Qualitätsangabe des Fits verwendet und gibt an, welcher Anteil der Varianz der Messwerte durch die Varianz der Regression erklärt werden kann. kein linearer Zusammenhang 0 R2 = ∈ (0, 1) teilweise linearer Zusammenhang 1 perfekt linearer Zusammenhang Das Bestimmtheitsmaß ist allerdings nur eine Angabe, wie gut der Fit-Prozess ist, aber keine Prüfung ob tatsächlich ein linearer Zusammenhang vorliegt. Umgekehrt bedeutet ein schlechtes R2 nicht zwangsläufig, dass die Messgrößen unkorreliert sind, sondern nur, dass keine lineare Abhängigkeit zwischen den Werten besteht. 147 A. Anhang A.1. Liste der Algorithmen 2.1. Gauß-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2. Jacobi-Iteration (Gesamtschrittverfahren) . . . . . . . . . . . . . . . . . 34 2.3. Gauß-Seidel-Iteration (Einzelschrittverfahren) . . . . . . . . . . . . . . . 35 3.1. Neville-Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2. Dividierte Differenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 3.3. Kubische Spline-Interpolation . . . . . . . . . . . . . . . . . . . . . . . . 58 3.4. Trigonometrische Interpolation . . . . . . . . . . . . . . . . . . . . . . . 62 4.1. Diskrete Fouriertransformation . . . . . . . . . . . . . . . . . . . . . . . 65 4.2. FFT für 2n Stützstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.1. Summierte Quadratur . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.2. Gauß-Integration mit Legendre-Polynomen . . . . . . . . . . . . . . . . . 90 6.1. Intervallhalbierungsverfahren . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2. Fixpunkt-Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.3. Newton-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7.1. Steepest Descent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 7.2. Conjugate Gradients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 8.1. Potenzmethode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 8.2. Householder-Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 149 A. Anhang 9.1. Matrix-Inversion mit Gauß . . . . . . . . . . . . . . . . . . . . . . . . . . 134 9.2. QR-Zerlegung für LGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 9.3. QR-Zerlegung für Matrixinversion . . . . . . . . . . . . . . . . . . . . . . 138 10.1. Lineare Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 A.2. Liste der Definitionen 1.1. Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1. Normierter Raum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2. Äquivalenz von Normen . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3. Matrixnorm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4. Verträglichkeit von Normen . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5. Induzierte Norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1. kubische Spline-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.2. Trigonometrische Interpolationsfunktion . . . . . . . . . . . . . . . . . . 59 4.1. Diskrete Fouriertransformation . . . . . . . . . . . . . . . . . . . . . . . 64 6.1. Lipschitz-Stetigkeit und Kontraktionen . . . . . . . . . . . . . . . . . . . 99 6.2. Fixpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 7.1. Projektoren auf Unterräume . . . . . . . . . . . . . . . . . . . . . . . . . 115 8.1. Ähnlichkeitstransformation . . . . . . . . . . . . . . . . . . . . . . . . . . 126 8.2. Householder-Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 10.1. Abstand eines Vektors von einem Unterraum . . . . . . . . . . . . . . . . 140 A.3. Liste der Sätze 2.1. Äquivalenz von Normen in endlichdimensionalen Vektorräumen . . . . . 25 2.2. Äquivalenz von LGS und Minimierung (Linear Descent) . . . . . . . . . 33 150 A.3. Liste der Sätze 2.3. Konvergenz der sukzessiven Approximation . . . . . . . . . . . . . . . . 36 3.1. Eindeutigkeit der Lagrange-Polynome . . . . . . . . . . . . . . . . . . . . 41 3.2. Iterationsschema des Neville-Algorithmus . . . . . . . . . . . . . . . . . . 42 3.3. Rekursionsvorschrift der dividierten Differenzen . . . . . . . . . . . . . . 45 3.4. Lösbarkeit von rationalen Interpolationsproblemen . . . . . . . . . . . . 53 3.5. Eindeutigkeit und Oszillationsverhalten kubischer Splines . . . . . . . . . 54 3.6. Koeffizienten von trigonometrischen Polynomen . . . . . . . . . . . . . . 61 4.1. Kontraktion der Fouriertransformation für 2n Stützstellen . . . . . . . . 66 5.1. Existenz & Eindeutigkeit von Orthogonalbasen für Polynome . . . . . . . 84 5.2. weitere Orthogonalitäten der Orthogonalbasis für Polynome . . . . . . . 85 5.3. Eigenschaften der Nullstellen der Orthogonalbasis-Polynome . . . . . . . 86 5.4. Regularität von Matrizen mit den Orthogonalbasis-Polynomen . . . . . . 87 5.5. Eigenschaften der Gauß-Integration . . . . . . . . . . . . . . . . . . . . . 88 6.1. Eigenschaften des Intervallhalbierungsverfahren . . . . . . . . . . . . . . 97 6.2. Konvergenz und Fehlerabschätzung der Fixpunkt-Iteration . . . . . . . . 100 6.3. Konvergenz des Newton(-Raphson)-Verfahrens . . . . . . . . . . . . . . . 102 6.4. Fixpunktsatz von Banach . . . . . . . . . . . . . . . . . . . . . . . . . . 104 6.5. Ableitungen von Polynomen im Horner-Schema . . . . . . . . . . . . . . 107 7.1. Optimalitätsbedingung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.2. Eigenschaften des Projektors . . . . . . . . . . . . . . . . . . . . . . . . . 115 7.3. Gram-Schmidt-Orthonormalisierung . . . . . . . . . . . . . . . . . . . . . 117 8.1. Konvergenz der Potenzmethode . . . . . . . . . . . . . . . . . . . . . . . 122 8.2. Eigenwert-Invarianz bei Ähnlichkeitstransformationen . . . . . . . . . . . 126 8.3. Eigenschaften von Householder-Matrizen . . . . . . . . . . . . . . . . . . 128 9.1. Iterationsvorschrift für QR-Zerlegung . . . . . . . . . . . . . . . . . . . . 136 10.1. Eigenschaften des Abstandes . . . . . . . . . . . . . . . . . . . . . . . . . 141 151 A. Anhang 10.2. Lösbarkeit und Eindeutigkeit der linearen Regression . . . . . . . . . . . 141 152 Literaturverzeichnis [1] J. Stoer and R. Bulirsch, Numerische Mathematik I. Springer Lehrbuch, 2007. [2] J. Nocedal and S. J. Wright, Numerical Optimization. Springer, 2006. 153