Mehrgitterverfahren. Bachelorarbeit. Fakultät für Mathematik Ruhr-Universität Bochum

Ähnliche Dokumente
Kevin Caldwell. 18.April 2012

Elemente der Analysis II

klar. Um die zweite Bedingung zu zeigen, betrachte u i U i mit u i = 0. Das mittlere -Zeichen liefert s

Optimalitätskriterien

Kapitel 15. Lösung linearer Gleichungssysteme

Numerische Behandlung des Eigenwertproblems

Einführung in die Vektor- und Matrizenrechnung. Matrizen

Kommentierte Musterlösung zur Klausur HM I für Naturwissenschaftler

Austausch- bzw. Übergangsprozesse und Gleichgewichtsverteilungen

Übungen zur Ingenieur-Mathematik III WS 2009/10 Blatt

Lösungen zum 3. Aufgabenblatt

9.2. DER SATZ ÜBER IMPLIZITE FUNKTIONEN 83

Beispiel Wenn p ein Polynom vom Grad größer gleich 1 ist, ist q : C Ĉ definiert durch q (z) =

Bestimmung einer ersten

Nichtlineare Optimierung ohne Nebenbedingungen

ax 2 + bx + c = 0, (4.1)

Teil II. Nichtlineare Optimierung

Optimale Steuerung. Sequentielle Quadratische Programmierung. Kevin Sieg. 14. Juli Fachbereich für Mathematik und Statistik Universität Konstanz

0, v 6 = , v 4 = span(v 1, v 5, v 6 ) = span(v 1, v 2, v 3, v 4, v 5, v 6 ) 4. span(v 1, v 2, v 4 ) = span(v 2, v 3, v 5, v 6 )

Lineare Gleichungssysteme

Lineare Algebra und Lösung linearer zeitinvarianter Differentialgleichungssysteme

Einführung. Vita Rutka. Universität Konstanz Fachbereich Mathematik & Statistik AG Numerik SS 2009

Finite Differenzen und Elemente

Modulabschlussklausur Analysis II

Lineare Gleichungssysteme

17. Penalty- und Barriere-Methoden

Numerisches Programmieren

HOCHSCHULE KONSTANZ TECHNIK, WIRTSCHAFT UND GESTALTUNG. Das Luzifer-Rätsel. Prof. Dr. Hartmut Plesske Wintersemester 2008/09. von.

Dünn besetzte Matrizen. Unterschiede in Speicherbedarf und Rechenzeit im Vergleich zu voll besetzten Matrizen. Besetzungsmuster mit spy.

Vorlesung bzw. 23. Januar Determinanten 1. Cramersche Regel

11. Primfaktorzerlegungen

Numerisches Programmieren

TECHNISCHE UNIVERSITÄT MÜNCHEN. Abzählbarkeit, Injektivität, Sürjektivität und Bijektivität

x 2 2x + = 3 + Es gibt genau ein x R mit ax + b = 0, denn es gilt

Lineare Gleichungssysteme

Praktikum Wissenschaftliches Rechnen 3. Aufgabenblatt

Höhere Mathematik 3. Apl. Prof. Dr. Norbert Knarr. Wintersemester 2015/16. FB Mathematik

Rekursionen. Georg Anegg 25. November Methoden und Techniken an Beispielen erklärt

LINEARE ALGEBRA Ferienkurs. Hanna Schäfer Philipp Gadow

Computer Vision: 3D-Geometrie. D. Schlesinger () Computer Vision: 3D-Geometrie 1 / 17

Numerisches Programmieren

13. Abzählen von Null- und Polstellen

3.3 Eigenwerte und Eigenräume, Diagonalisierung

Definition und Eigenschaften Finiter Elemente

Lineare Algebra (Mathe I) für Wirtschaftsinformatiker; Zusammenfassung

3. Grundlagen der Linearen Programmierung

Berechnung von Eigenwerten und Eigenvektoren

Modellierung, Simulation, Optimierung Diskretisierung 1

Ergänzungen zur Analysis I

Übungen zum Ferienkurs Lineare Algebra WS 14/15

2.12 Potenzreihen. 1. Definitionen. 2. Berechnung POTENZREIHEN 207. Der wichtigste Spezialfall von Funktionenreihen sind Potenzreihen.

Leitfaden Lineare Algebra: Determinanten

Kochen mit Jordan. Vorbereitungen. Schnellzubereitung. JNF für Genießer wenn s noch etwas mehr sein darf

TEILWEISE ASYNCHRONE ALGORITHMEN

1 Lineare Gleichungssysteme

34 5. FINANZMATHEMATIK

Eigenwerte und Eigenvektoren von Matrizen

Das Briefträgerproblem

Bildverarbeitung Herbstsemester Kanten und Ecken

Lineare Algebra - alles was man wissen muß

PageRank-Algorithmus

Computer Vision: Optische Flüsse

Ohne Mathematik undenkbar!

Repetitionsaufgaben: Lineare Gleichungen

2.4 Adaptive Verfahren mit Schrittweitensteuerung

Algorithmen II Vorlesung am

Extremwertverteilungen

Charakteristikenmethode im Beispiel

Vorlesung. Funktionen/Abbildungen 1

Seminararbeit für das SE Reine Mathematik- Graphentheorie

6 Conways Chequerboard-Armee

Einführung in MATLAB

Installation. Arbeiten mit der MATLAB-Entwicklungsumgebung. MATLAB als Taschenrechner mit Matrix- und Vektorrechnung.

Musterlösungen zu Prüfungsaufgaben über gewöhnliche Differentialgleichungen Prüfungsaufgabe a) Gegeben sei die lineare Differentialgleichung

Kapitel 15: Differentialgleichungen

Rekursionen (Teschl/Teschl )

Die Methode der Finiten Elemente

Schnelle Lösung großer Gleichungssysteme

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Kapitel 3 Mathematik. Kapitel 3.3. Algebra Gleichungen

Mathematik für Informatiker II. Beispiellösungen zur Probeklausur. Aufgabe 1. Aufgabe 2 (5+5 Punkte) Christoph Eisinger Sommersemester 2011

Vorlesung 3 MINIMALE SPANNBÄUME

JOHANNES BONNEKOH. Analysis. Allgemeine Hochschulreife und Fachabitur

Vorwort. Günter M. Gramlich. Lineare Algebra. Eine Einführung ISBN: Weitere Informationen oder Bestellungen unter

Logische Verknüpfungen. while-schleifen. Zahlendarstellung auf dem Computer. Formatierung von Zahlen in MATLAB.

Graphenalgorithmen und lineare Algebra Hand in Hand Vorlesung für den Bereich Diplom/Master Informatik

Erwin Grüner

Programmierung 2. Dynamische Programmierung. Sebastian Hack. Klaas Boesche. Sommersemester

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

(2) (x x x 2 n)(y y y 2 n) = z z z 2 n

PRAKTIKUM REGELUNGSTECHNIK 2

6 Symmetrische Matrizen und quadratische Formen

Im Jahr t = 0 hat eine Stadt Einwohner. Nach 15 Jahren hat sich die Einwohnerzahl verdoppelt. z(t) = at + b

Approximation durch Taylorpolynome

Taylorentwicklung der k ten Dimension

u + v = v + u. u + (v + w) = (u + v) + w. 0 V + v = v + 0 V = v v + u = u + v = 0 V. t (u + v) = t u + t v, (t + s) u = t u + s u.

Grundlagen der Computer-Tomographie

Bildverarbeitung Herbstsemester Fourier-Transformation

Transkript:

Mehrgitterverfahren Bachelorarbeit Fakultät für Mathematik Ruhr-Universität Bochum Hrik Flaskühler Bochum, September 202

Inhaltsverzeichnis Einleitung 2 Numerische Behandlung partieller Differentialgleichungen 3 2. Finite Differenzen............................... 3 2.. Der 5-Punkte-Stern.......................... 4 2.2 Finite Elemente................................ 6 3 Numerische Behandlung linearer Gleichungssysteme 8 3. Direkte Lösungsverfahren........................... 8 3.2 Iterative Lösungsverfahren.......................... 9 3.2. Das Jacobi-Verfahren......................... 3.2.2 Jacobi-Relaxation........................... 2 3.2.3 Das Gauß-Seidel-Verfahren...................... 3 3.3 Aufwand der iterativen Verfahren...................... 4 3.4 Die Glättungseigenschaft........................... 4 3.5 Kontrolle des Fehlers............................. 8 3.6 Mehr Gitter.................................. 8 4 Das Mehrgitter-Verfahren 20 4. Die Idee.................................... 20 4.. Restriktion und Prolongation.................... 2 4..2 Rekursion............................... 23 4.2 Varianten................................... 24 4.3 Aufwand des Mehrgitter-Verfahrens..................... 25 5 Implementierung 27 5. Das Programm................................ 27 5.2 Erster Test: Einheitsquadrat......................... 30 5.3 Zweiter Test: Dreieck............................. 3 5.4 Dritter Test: L-förmiges Gebiet....................... 36 Literaturverzeichnis 4

Einleitung Partielle Differentialgleichungen sind wichtige Hilfsmittel bei der mathematischen Modellierung realer Prozesse. Man findet sie in den Naturwissenschaften, Ingenieurswissenschaften, in der Informatik und der Wirtschaftswissenschaft. Häufig ist jedoch eine analytische Lösung dieser Gleichungen nicht möglich. Somit ist man auf eine numerische Approximation angewiesen. Lösungsräume von Differentialgleichungen sind im Allgemeinen unlich dimensional. Numerische Verfahren versuchen nun, die Lösung mittels lich dimensionaler (diskreter) Probleme zu approximieren. Ein Ansatz ist, die Werte der Lösungsfunktion in lich vielen diskreten Gitterpunkten zu approximieren Verfahren der finiten Differenzen, Abschnitt 2.. Ein anderer Ansatz versucht eine möglichst gute Approximation der Lösungsfunktion in einem lich dimensionalen Unterraum des Lösungsraumes zu finden Verfahren der finiten Elemente, Abschnitt 2.2. Wir werden sehen, dass in beiden Fällen das diskrete Problem aus der Lösung eines dünn besetzten linearen Gleichungssystems besteht. Zwei Eigenschaften sind für numerische Lösungsverfahren wesentlich. Das Verfahren soll für größer werde Dimension des diskreten Problems gegen die exakte Lösung der Differentialgleichung konvergieren. Andererseits soll das diskrete Problem mit Hilfe von Computern möglichst effizient berechenbar sein. Im Rahmen dieser Arbeit wird uns vor allem der zweite Punkt beschäftigen, das heißt wir suchen nach möglichst effizienten Verfahren zum Lösen der hier entstehen dünn besetzten linearen Gleichungssysteme. Eine schöne Eigenschaft linearer Gleichungssysteme ist, dass direkte Lösungsverfahren existieren (Abschnitt 3.), das bedeutet Verfahren, die mit lich vielen Rechenoperationen im Rahmen der Maschinengenauigkeit die exakte Lösung liefern. Wir werden jedoch sehen, dass diese Verfahren für große Gleichungssysteme inakzeptabel aufwig sind. Auf der anderen Seite gibt es iterative Verfahren (Abschnitt 3.2), die mit einer bestimmten Anfangsnäherung der Lösung beginnen und diese in jedem Schritt verbessern, sodass nach unlich vielen Iterationen das Verfahren gegen die exakte Lösung konvergiert. Jeder Iterationsschritt ist normalerweise möglichst leicht durchzuführen, die Effizienz hängt somit maßgeblich von der Konvergenzrate des Verfahrens ab. Wir werden jedoch sehen, dass bei klassischen Iterationsverfahren die Konvergenzrate bei zunehmer Dimension des diskreten Problems schlechter wird. Eine hohe Dimension ist aber für eine hohe Genauigkeit des numerischen Lösungsverfahrens für die partielle Differentialgleichung notwig, und an deren Lösung sind wir ja eigentlich interessiert. Das bedeutet, je genauer man die Differentialgleichung lösen möchte, umso ineffizienter wird das Verfahren zur Lösung des diskreten Problems. Ziel hinter Mehrgitter-Verfahren ist es somit, ein Verfahren zu konstruieren, dessen Konvergenzrate unabhängig von der Dimension des diskreten Problems ist. Wir werden

Einleitung dazu die zentralen Ideen dieser Verfahren herleiten (Kapitel 4). Den formalen Konvergenzbeweis werden wir an dieser Stelle jedoch schuldig bleiben. Stattdessen versuchen wir in Kapitel 5 eine konkrete Implementierung eines Mehrgitter- Verfahrens für das in dieser Arbeit betrachtete Modellproblem in Matlab zu schreiben. 2

2 Numerische Behandlung partieller Differentialgleichungen Ausgangspunkt der hier vorgestellten Problemstellung ist die numerische Behandlung partieller Differentialgleichungen. Im Folgen werden die numerischen Verfahren anhand eines typischen Modellproblems vorgestellt. Als solches Problem wird hier die einfachste elliptische Differentialgleichung zweiter Ordnung gewählt, die Poisson-Gleichung: u = f i 2 u x 2 i = f (2.) Hierbei ist Ω R n offen und zusammenhäng, u C 2 (Ω, R) C 0 ( Ω, R) sowie f C 0 (Ω, R). Sei zusätzlich g C 0 ( Ω, R). Um eine eindeutige Lösung erwarten zu können benötigen wir zusätzlich Bedingungen an den Rand des Gebietes Ω. Dirichlet-Randbedingungen: u = g auf Ω. Neumann-Randbedingungen: n u = g auf Ω. Hier ist n die äußere Normale an Ω. Periodische Randbedingungen: Im eindimensionalen bedeutet das, zu fordern, dass u am linken und rechten Rand identisch sein soll. Im zweidimensionalen kann man das zum Beispiel bei Rechtecksgebieten für beide Koordinatenrichtungen fordern. Anhand dieses Modellproblems werden wir uns nun numerische Verfahren zur Lösung des Problems ansehen. 2. Finite Differenzen Eine einfache Methode zur Diskretisierung der Poisson-Gleichung ist die Klasse der Finiten-Differenzen-Verfahren. Hierbei werden Ableitungen durch Linearkombinationen von diskreten Auswertungen der gesuchten Funktion ersetzt. Ist die Funktion bekannt, können auf diese Weise Ableitungen beliebig genau berechnet werden. Erste Beispiele sind die Vorwärts- und Rückwärtsdifferenz für die erste Ableitung in einer Raumdimension. [LeV07, S.3-8] Vorwärtsdifferenz: f(x + h) f(x) h = f (x) + O(h) (2.2) 3

2 Numerische Behandlung partieller Differentialgleichungen f(x) f(x h) Rückwärtsdifferenz: = f (x) + O(h) (2.3) h Dies sind Approximationen erster Ordnung, das heißt, die Differenzen konvergieren für h 0 linear gegen die Ableitung der Funktion f. Wen wir nun erst die Rückwärts-, dann die Vorwärtsdifferenz auf f an, erhalten wir ( ) f(x h) 2f(x) + f(x + h) = f (x) + O(h 2 ). (2.4) h 2 Dies ist in der Tat eine Approximation zweiter Ordnung an die zweite Ableitung der Funktion f. Die Konvergenzeigenschaften der finiten Differenzen lassen sich leicht mittels Taylor-Entwicklung nachweisen, vorausgesetzt die Funktion ist ausreich oft differenzierbar. Betrachten wir nun partielle Differentialgleichungen, so sind die Lösungen im Allgemeinen natürlich nicht bekannt. Die zentrale Idee ist nun, das Gebiet, an dem man interessiert ist, mit einem diskreten Gitter zu überdecken und die Ableitungen der Lösungsfunktion in der Differentialgleichung durch finite Differenzen der umliegen Gitterpunkte zu ersetzen. Das führt bei linearen Differentialgleichungen auf ein lineares Gleichungssystem für die Werte der Lösungsfunktion in den Gitterpunkten. 2.. Der 5-Punkte-Stern Wir betrachten das obige Modellproblem der Poisson-Gleichung auf Ω = (0, ) 2, dem Einheitsquadrat. Dieses überdecken wir durch ein äquidistantes Gitter {( ) k Ω h = N +, l k, l N}. N + Hierbei ist also N die Anzahl an inneren Gitterpunkten pro Koordinatenrichtung. Man bezeichnet h = als Gitterweite. N+ Für dieses Problem in zwei Raumdimensionen benötigen wir nun eine Approximation für den Laplace-Operator = 2 + 2 [LeV07, S.60f] Wir ersetzen hierfür die partiellen x 2 y 2 Ableitungen durch die zentrierte Differenz für die zweite Ableitung in einer Dimension. Das liefert h u(x h, y) 2u(x, y) + u(x + h, y) u(x, y h) 2u(x, y) + u(x, y + h) u(x, y) = + h 2 h 2 = ( ) 4u(x, y) + u(x h, y)) + u(x + h, y) + u(x, y h) + u(x, y + h). h 2 Wir schreiben im Folgen u k,l = u(kh, lh) als Kurzschreibweise für die Funktionsauswertung im (k, l) ten Gitterpunkt. Das liefert uns eine kompakte Formulierung des 5-Punkte-Sterns für den Laplace-Operator h u k,l = ( 4u h 2 k,l + u k,l + u k+,l + u k,l + u k,l+ ). (2.5) 4

2 Numerische Behandlung partieller Differentialgleichungen Ersetzen wir den Laplace-Operator in jedem Gitterpunkt durch den 5-Punkte-Stern und setzen ihn gleich dem Wert von f in diesem Gitterpunkt, führt das auf das lineare Gleichungssystem h 2 à Id Id à Id...... Id à Id u,. u N, u,2. u N,2.. u,n. u N,N = f,. f N, f,2. f N,2.. f,n. f N,N. (2.6) Hierbei sind à und Id N N-Blockmatrizen. Id ist die N-dimensionale Einheitsmatrix und à ist gegeben durch 4 4... à =.. (2.7).. 4 4 Wir bezeichnen im folgen die Matrix aus Gleichung 2.6 mit A. Die Matrix A ist offensichtlich symmetrisch und was weniger offensichtlich ist die Eigenwerte sind gegeben durch λ p,q (A) = 2 h 2 [ ( cos(pπh) ) + ( cos(qπh) ) ], p, q N. (2.8) Man kann nachrechnen, dass dies tatsächlich die Eigenwerte zu den Einvektoren v p,q k,l = sin(pπkh) sin(qπlh), p, q N, k, l N (2.9) sind. [Ise96, Lemma 7., S.7f] Wie man sieht, sind alle Eigenwerte negativ, woraus folgt, dass A symmetrisch und negativ definit ist. Damit ist A insbesondere nicht singulär und das Gleichungssystem ist für alle rechten Seiten f lösbar. Es soll an dieser Stelle nicht das Ziel sein, die Korrektheit der 5-Punkte-Stern Diskretisierung zu beweisen. Vgl. hierzu [Ise96, Theorem 7.2, S.20] 5

2 Numerische Behandlung partieller Differentialgleichungen Eine weitere wichtige Eigenschaft ist, dass die Matrix A dünn besetzt ist. Das soll heißen, dass die Zahl der von Null verschiedenen Einträge in jeder Zeile nach oben beschränkt ist und das unabhängig von der Matrix-Dimension. Das heißt für großes N sind die meisten Einträge Null. Die maximale Anzahl der von Null verschiedenen Einträge pro Zeile ist im Falle der Matrix A gerade fünf oder, anders gesagt, in jeder Zeile stehen mindestens N 2 5 Nullen. Hieraus ergeben sich erhebliche Vorteile für den Speicherbedarf und den Aufwand von Lösungsverfahren. Das wird in Kapitel 3 noch näher betrachtet werden. 2.2 Finite Elemente Andere häufig verwete Verfahren sind die Finite-Element-Verfahren. Wir werden in diesem Abschnitt eine einfache Variante dieser Verfahren auf unser Modellproblem anwen, um uns davon zu überzeugen, dass auch diese im Wesentlichen auf die gleiche Art von linearen Gleichungssystemen führen. Die zentrale Idee der Finten Elemente ist, die Differentialgleichung in ein Variationsproblem der Form a(u, v) = l(v) v X (2.0) zu überführen. Hierbei ist (X,. X ) ein Banachraum, l L(X, R) ein stetiges lineares Funktional und a L 2 (X, R) bilinear, symmetrisch und koerziv. Dann sagt uns der Satz von Lax-Milgram, dass dieses Problem eine eindeutige Lösung u X besitzt. [Ver, S.5] Die Methoden der finiten Elemente ersetzen nun den Raum X durch einen lichdimensionalen Unterraum X h X und lösen dort das diskrete Problem a(u, v h ) = l(v h ) v h X h. (2.) Kommen wir zurück zu unserer Differentialgleichung, das heißt wir betrachten die Poisson-Gleichung mit homogenen Dirichlet-Randbedingungen auf Ω = (0, ) 2 [Ver, S.37ff]: { u(x, y) = f(y, x) (x, y) Ω (2.2) u(x, y) = 0 (x, y) Ω Wir setzen nun X = H0((0, ) 2 ), das heißt gleich dem Raum aller Funktionen, deren (schwache) Ableitung existiert und in L 2 ((0, ) 2 ) liegt. Der Index 0 gibt zudem an, dass die Funktionen auf dem Rand des Einheitsquadrates verschwinden sollen. Wir multiplizieren die Gleichung mit v X und integriere über Ω. Das liefert ( u)v = fv u v = fv. (2.3) Ω Ω Die rechte Gleichung folgt durch partielle Integration und Multiplikation mit. Wir benötigen an dieser Stelle nur noch die erste Ableitung, sodass u H 0(Ω) in der Tat ausreicht. Ω Ω 6

2 Numerische Behandlung partieller Differentialgleichungen Man kann weiterhin zeigen, dass a(u, v) = u v bilinear, symmetrisch und koerziv ist, sowie l(v) = fv linear und stetig. Gleichung 2.3 ist damit ein Variationsproblem im Sinne des Satzes von Lax-Milgram. Die Lösung dieses Variationsproblems muss nicht zwangsläufig in C 2 0(Ω) sein. Eine solche Lösung bezeichnet man als schwache Lösung der Differentialgleichung. Wir unterteilen das Gebiet Ω nun in rechtwinklig-gleichschenklige Dreiecke mit achsenparallelen Katheten und wählen als lich dimensionalen Unterraum X h = {ϕ C 0 ( Ω) : ϕ K P Dreiecke K, ϕ = 0 auf Ω}. Für jedes dieser Dreiecke ist ein lineares Polynom p P eindeutig bestimmt durch seine Werte in den drei Eckpunkten des Dreiecks. Zusätzlich gilt für zwei Dreiecke K und K 2 die genau eine Kante gemeinsam haben, dass die Funktion { ϕ = p auf K ϕ = ϕ = p 2 auf K 2 genau dann stetig ist, wenn p und p 2 in den Endpunkten der gemeinsamen Kante übereinstimmen. Damit sind die Funktionen aus X h eindeutig bestimmt durch ihre Werte in den Dreieckseckpunkten, die nicht auf Ω liegen. Als Basis des Raums X h wählen wir die nodalen Basisfunktionen b k,l. Zu jedem inneren Dreieckseckpunkt P k,l = (kh, lh) Ω sei b k,l genau die Funktion, die eingeschränkt auf ein beliebiges Dreieck K i ein lineares Polynom ist und zusätzlich in P k,l den Wert besitzt und in allen anderen Dreieckseckpunkten den Wert 0. Man kann sich davon überzeugen, dass die b k,l eindeutig bestimmt sind und zudem eine Basis von X h bilden. Wir müssen also nun das diskrete Problem u b k,l = fb k,l k, l =,..., N (2.4) Ω lösen. Da die b k,l eine Basis bilden, können wir die Lösung u in ihnen entwickeln u = Ω N c k,l b k,l c k,l R. (2.5) k,l= Das führt auf ein lineares Gleichungssystem für die c k,l. Insbesondere sind die c k,l gerade die Werte von u in den Dreieckseckpunkten. Das heißt, wir haben ein lineares Gleichungssystem für die Werte der Lösung der Differentialgleichung in diskreten Gitterpunkten. Man kann zeigen, dass dieses Gleichungssystem genau die Form aus Gleichung 2.6 besitzt. Wir haben uns also an dieser Stelle exemplarisch davon überzeugt, dass auch das Verfahren der finiten Elemente auf dünn besetzte lineare Gleichungssysteme führt. Es scheint also für die numerische Behandlung partieller Differentialgleichungen nützlich zu sein, sich mit der Lösung solcher Systeme näher zu beschäftigen. 7

3 Numerische Behandlung linearer Gleichungssysteme Wir haben gesehen, dass die Anwung von Finiten Differenzen oder Finiten Elementen auf das Lösen dünn besetzter linearer Gleichungssysteme führt. Es ist somit für die praktische Anwung essentiell wichtig, diese Gleichungssysteme mit möglichst geringem Aufwand lösen zu können. Es gibt zwei generelle Klassen von Lösungsverfahren. [LeV07, S.66] Da sind zum einen direkte Verfahren, die in exakter Arithmetik nach lich vielen Schritten die exakte Lösung des Gleichungssystem liefern. Zum anderen gibt es iterative Verfahren, die mit einem Startvektor beginnen und nach einer bestimmten Vorschrift versuchen, die Näherung an die Lösung zu verbessern. Dieser Prozess wird dann solange iteriert, bis der gewünschte Grad an Genauigkeit erreicht ist. Es wird sich zeigen, dass direkte Verfahren häufig deutlich mehr Aufwand und Speicherplatz benötigen. Im Falle der Systeme, die von Finiten Differenzen oder Finiten Elementen herrühren, kommt hinzu, dass man eigentlich nicht an der Lösung des Gleichungssystems, sondern an der Lösung der Differentialgleichung interessiert ist und die Genauigkeit hier bereits durch die Genauigkeit des Diskretisierungsverfahrens beschränkt ist. Verbessert man die Genauigkeit des Lösungsverfahrens über diese Schranke hinaus, bedeutet das im Allgemeinen keine Verbesserung der Lösung der Differentialgleichung. Deswegen bieten sich iterative Verfahren hier an. 3. Direkte Lösungsverfahren Direkte Lösungsverfahren liefern in licher Zeit die exakte Lösung des Systems und erscheinen daher zunächst die naheliegste Lösung zu sein. Das bekannteste direkte Lösungsverfahren ist sicherlich der Gauß-Algorithmus. Wie groß ist aber Aufwand und Speicherbedarf dieses Verfahrens? [LeV07, S.66ff] Sei M eine m m-matrix, das heißt, wir haben m Unbekannte, die es zu berechnen gilt. Der bestmögliche Fall benötigt mindestens O(m) Operationen und Speicherplätze. Beim Gauß-Algorithmus müssen alle Elemente ungleich Null unter der Diagonalen eliminiert werden, das heißt, der Gesamtaufwand des Algorithmus ist Anzahl der Elemente ungleich Null unter der Diagonalen mal Aufwand zum Eliminieren dieser Elemente. Bei einer allgemeinen Matrix gibt es m(m )/2 = O(m 2 ) Elemente unter der Diagonalen. Diese werden durch Linearkombinationen der Zeilen eliminiert, wobei für jedes Element O(m) Operationen benötigt werden. Insgesamt benötigt man also O(m 3 ) Operationen, was weit vom Optimalfall entfernt ist. 8

3 Numerische Behandlung linearer Gleichungssysteme Nun haben wir es hier nicht mit allgemeinen, sondern mit dünn besetzten Matrizen zu tun. Wir wollen sehen, ob das hilft. Nehmen wir zunächst den Fall des eindimensionalen Poisson-Problems. In diesem Fall führt die Diskretisierung mittels zentrierter Differenz (Gleichung 2.4) auf ein tridiagonales Gleichungssystem, das heißt, nur die Diagonalen und die ersten Nebiagonalen besitzen Elemente ungleich Null. [LeV07, S.5f] Hier gibt es offensichtlich nur m = O(m) Elemente ungleich Null unter der Diagonalen. Insbesondere ist die Eliminierung dieser Elemente einfach, jedes Elemente benötigt nur O() Operationen. Damit ist der Gauß-Algorithmus für tridiagonale Systeme tatsächlich optimal. Wie sieht es aber mit unserem Modell-Problem, dem zweidimensionalen Poisson- Problem aus? Hier gibt es in jeder Zeile unter der Diagonalen maximal zwei Elemente ungleich Null, was insgesamt erneut O(m) Elemente ergibt. Für die benötigten Operationen findet man, dass diese abhängig sind von der Bandbreite b der Matrix, das heißt, dem größten Abstand eines von Null verschiedenen Elementes zur Diagonalen. Hat eine Matrix Bandbreite b, so benötigt man zur Eliminierung eines Elementes O(b 2 ) Operationen. Im Fall der Matrix A aus Gleichung 2.6 ist b = m 2, das heißt, wir benötigen für jedes Element O(m), insgesamt also O(m 2 ) Operationen. Wählt man wie oben als Parameter N = m 2, also die Anzahl der Unbekannten je Koordinatenrichtung, benötigt der Gauß-Algorithmus O(N 4 ) Operationen. Wir werden als Nächstes untersuchen, ob iterative Methoden dies besser machen können. 3.2 Iterative Lösungsverfahren Wie oben bereits gesagt, nutzen iterative Verfahren im Allgemeinen beliebig gewählte Startvektoren und versuchen dann, diese in jedem Iterationsschritt zu verbessern. Damit ein solches Verfahren tatsächlich sinnvoll sein kann, muss es mindestens zwei Anforderungen erfüllen. [Ise96, S.85] Zum einen muss es für jeden beliebigen Startvektor konvergieren, zum anderen muss der Grenzwert des Verfahrens der exakten Lösung des Problems entsprechen. Diese beiden Eigenschaften sind sicherlich notwig, damit ein Verfahren brauchbar ist, reichen, wie wir sehen werden, im Allgemeinen aber noch nicht aus. Im Folgen wollen wir zur Vereinfachung einige Einschränkungen vornehmen. Unser Verfahren soll zum einen linear sein, dass bedeutet, die Iterationsvorschrift in jedem Schritt soll linear sein. Zum zweiten soll es stationär sein, dass heißt, die Iterationsvorschift ist in jedem Schritt die gleiche. Und schließlich soll das Verfahren ein Ein-Schritt- Verfahren sein, das bedeutet, dass für die Berechnung des neuen Wertes x [s+] nur der zuletzt berechnete Wert x [s] benutzt wird. Das motiviert die folge Definition. [Ver0, Das bedeutet b ist Bandbreite der Matrix M, falls gilt k > b + l l > b + k M kl = 0 9

3 Numerische Behandlung linearer Gleichungssysteme Definition IV.6., S.2] Definition 3. Seien A, M GL(n), A = M N und b R n. Eine Iterationsvorschrift der Form x [0] gegeben x [s+] = M Nx [s] + M b s = 0,,... nennen wir ein stationäres Iterationsverfahren zur Lösung des LGS Ax = b. Die Matrix S = M N = Id M A heißt Iterationsmatrix des Verfahrens. Bezüglich der Konvergenz eines solchen Verfahrens finden wir folgen Satz. [Ver0, Satz IV.6.7, S.7] Satz 3. Ein stationäres Iterationsverfahren konvergiert genau dann für jede rechte Seite b und jeden Startwert x [0], wenn für die Iterationsmatrix S gilt ρ(s) <. Hierbei ist ρ der Spektralradius der Matrix S, das bedeutet der betragsmäßig größte Eigenwert. Beweis: siehe [Ver0, S.7f]. Dieser Satz gibt ein Hilfsmittel, wie man die Güte eines stationären Iterationsverfahrens in erster Näherung bewerten kann. Sei x die exakte Lösung des Gleichungssystems, x [s] die Näherung nach s Iterationen und ε [s] = x x [s] der Fehler der Näherung nach s Iterationsschritten, so gilt ε [s] = S s ε [0]. (3.) Daraus folgt ε [s] S s ε [0] ( ρ(s) ) s ε [0]. (3.2) Das bedeutet, dass Verfahren konvergiert schnell, wenn der Spektralradius deutlich kleiner als ist und eher langsam, wenn der Betrag des größten Eigenwertes nahe bei liegt. 2 Wir wollen nun zwei typische Beispiele für stationäre Iterationsverfahren der Form aus Def. 3. im Bezug auf unser Modellproblem analysieren. 2 Für genauere Angaben über das in Gleichung 3.2 siehe den Beweis von Satz 3. in [Ver0] 0

3 Numerische Behandlung linearer Gleichungssysteme 3.2. Das Jacobi-Verfahren Wir betrachten noch einmal den 5-Punkte-Stern für die zweidimensionale Poisson-Gleichung. Die Zeilen des Gleichungssystem 2.6 können in der Form ( ) 4u h 2 k,l + u k,l + u k+,l + u k,l + u k,l+ = f k,l (3.3) geschrieben werden. [LeV07, S.69f] Dies kann umgeschrieben werden, zu u k,l = 4 Das motiviert die Iterationsvorschrift ( uk,l + u k+,l + u k,l + u k,l+ ) h 2 4 f k,l. (3.4) u [s+] k,l = ( [s] u k,l 4 + u[s] k+,l + u[s] k,l + ) h 2 u[s] k,l+ 4 f k,l. (3.5) Man stellt fest, dass diese Vorschrift tatsächlich die Form aus Def. 3. erfüllt, mit A = D L R, wobei gilt D ij = A ij falls i = j Sei nun M = D und N = R + L. Dann ist Der Iterationsschritt lautet damit L ij = A ij falls i > j R ij = Aij falls i < j. S J = D (R + L) = Id D A. (3.6) u [s+] = D (R + L)u [s] + D f. (3.7) Man nennt dies das Jacobi-Verfahren. Nach Satz 3. benötigen wir nun den Spektralradius ρ(s J ), um Konvergenz des Jacobi- Verfahrens für unser Modell-Problem zu zeigen. Man sieht leicht ein, dass S J die gleichen Eigenvektoren wie die Matrix A besitzt. Die zugehörigen Eigenwerte berechnen sich leicht zu λ p,q (S J ) = + h2 4 λp,q (A) = + 2 [ ( cos(pπh) ) + ( cos(qπh) ) ], p, q N. (3.8) Setzt man nun die Reihenentwicklung des Kosinus ein 3, so lassen sich die Eigenwerte abschätzen über λ p,q (S J ) p2 π 2 h 2 4 q2 π 2 h 2. (3.9) 4 3 cos(x) x 2 /2

3 Numerische Behandlung linearer Gleichungssysteme Der größte Eigenwert ist somit für p = q = gegeben durch λ max (S J ) = π2 h 2 2. (3.0) Man sieht nun, dass tatsächlich für jedes feste h > 0 gilt ρ(s) <. Damit konvergiert das Verfahren. Wir haben aber auch gesehen, dass der Wert ρ(s) ein Indikator für die Güte des Verfahrens ist. Für h 0 konvergiert der Ausdruck für den Spektralradius jedoch quadratisch gegen. Das bedeutet, je feiner man das Gitter für die Diskretisierung der Differentialgleichung wählt, umso langsamer konvergiert das Jacobi-Verfahren und umso aufwändiger wird somit das Lösen des Gleichungssystems 2.6. 3.2.2 Jacobi-Relaxation Eine leichte Verbesserung bringt das Jacobi-Relaxation-Verfahren. [Ver0, S.3] Das Jacobi-Verfahren war gegeben durch u [s+] = D (R + L)u [s] + D f u [s+] = (Id D A)u [s] + D f u [s+] = u [s] + D (f Au [s] ). (3.) Das heißt, das Jacobi-Verfahren ist eine Korrektur des Vektors u [s] um den Vektor r [s] := D (f Au [s] ). (3.2) Die Idee ist nun, diese Korrektur mit einem skalaren Vielfachen ω R + zu gewichten. Das liefert mit der neuen Iterationsmatrix u [s+] = u [s] + ωd (f Au [s] ) u [s+] = (Id ωd A)u [s] + ωd f u [s+] = ( ω)id + ω(id D A)u [s] + ωd f u [s+] = ( ω)id + ωs J u [s] + ωd f (3.3) S J,ω = ( ω)id + ωs J. (3.4) Die Eigenvektoren bleiben immer noch die gleichen wie beim Jacobi-Verfahren und der Originalmatrix A. Die neuen Eigenwerte errechnen sich leicht zu λ p,q (S J,ω ) = ( ω) + ωλ p,q (S J ), p, q N ( = ( ω) + ω + [ ( ) ( ) ]) cos(pπh) + cos(qπh) 2 = + ω 2 [ ( cos(pπh) ) + ( cos(qπh) ) ]. (3.5) 2

3 Numerische Behandlung linearer Gleichungssysteme Damit folgt für den Spektralradius ρ(s J,ω ) = ω π2 h 2 2. (3.6) Das bedeutet, das Jacobi-Relaxation-Verfahren konvergiert tatsächlich besser als das normale Jacobi-Verfahren falls ω (0, ). Am asymptotisch schlechten Verhalten für h 0 ändert dies aber nichts. 3.2.3 Das Gauß-Seidel-Verfahren Beim Jacobi-Verfahren wird der neue Wert u [s+] allein aus den Werten des Vektors u [s] berechnet. Durchläuft man die Gitterpunkte jedoch zum Beispiel Spaltenweise, so stehen für die Berechnung der (k, l)-ten Komponente von u [s+] die Werte u [s+],, u [s+] 2,,..., u [s+] k,l bereits bereit. Dies macht sich das Gauß-Seidel-Verfahren zu nutze. Seien D, L, R wie oben, dann ist die Iterationsvorschrift des Gauß-Seidel-Verfahren gegeben durch u [s+] = (D L) Ru [s] + (D L) f. (3.7) Die Iterationsmatrix ist dann gegeben durch S GS = (D L) R = Id (D L) A. (3.8) Im Gegensatz zum Jacobi-Verfahren macht sich das Gauß-Seidel-Verfahren die bereits berechneten Werte von u [s+] zu nutze. Damit macht es natürlich einen Unterschied, in welcher Reihenfolge die Punkte des Gitters durchlaufen werden. Wir wollen auf diesen Punkt jedoch nicht weiter eingehen und im Folgen immer annehmen, dass die Punkte spaltenweise durchlaufen werden. Unglücklicherweise sind die Eigenvektoren von S GS und A nun nicht mehr identisch. Nach dem Satz von Stein-Rosenberg [Ise96, Theorem 0.4, S.96] gilt aber unter der Voraussetzung das ρ(s J ) < gilt (was wir oben bereits gesehen haben) ρ(s J ) = ρ(s GS ) = 0 oder ρ(s GS ) < ρ(s J ). (3.9) Diese Abschätzung lässt sich noch verschärfen. [Ise96, S.24ff] ρ(s GS ) = ( ρ(s J ) ) 2 π 2 h 2. (3.20) Das liefert zwar insgesamt eine leicht bessere Konvergenzrate als das Jacobi-Verfahren. Das Problem bleibt aber, dass für kleines h der Spektralradius nahe an liegt, das Verfahren also schlecht konvergiert. Es sei der Vollständigkeit halber erwähnt, dass es auch für das Gauß-Seidel-Verfahren ein Relaxations-Verfahren gibt, das sogenannte Successive-Over-Relaxation (SOR)-Verfahren. Wir benötigen dieses für die weitere Betrachtung jedoch nicht. 3

3 Numerische Behandlung linearer Gleichungssysteme 3.3 Aufwand der iterativen Verfahren Wie oben bereits erwähnt, benötigt ein Lösungsverfahren für unser Modell-Problem im Optimalfall O(N 2 ) Operationen. Der Gauß-Algorithmus benötigte O(N 4 ) Operationen. Wie sieht es nun mit den vorgestellten iterativen Verfahren aus? Die Anwung eines der oben beschriebenen Verfahren benötigt in jedem Iterationsschritt eine Matrix-Vektor-Multiplikation. Diese benötigt für dünn besetzte Matrizen bereits O(N 2 ) Operationen. Das bedeutet aber, die Konvergenzrate das heißt die Anzahl an benötigten Iterationen, die nötig sind um eine bestimmte Genauigkeit zu erreichen muss unabhängig von N sein. Wir haben jedoch anhand des Spektralradius festgestellt, dass die Konvergenzrate für großes N immer schlechter wird, das heißt, insbesondere kann sie nicht unabhängig von N sein. Wir werden im Folgen also ein Verfahren suchen, dessen Konvergenzrate unabhängig von N ist. Dazu schauen wir uns die beschriebenen Verfahren einmal etwas genauer an. 3.4 Die Glättungseigenschaft Betrachten wir das Jacobi-Verfahren nochmal etwas genauer. [Hac85, S.8ff] Die Eigenvektoren der Iterationsmatrix S J sind gegeben durch v p,q k,l = sin(pπkh) sin(qπlh), p, q N, k, l N. (3.2) Wir nennen diese Wellenvektoren und das Tupel (p, q) Wellenzahl des Wellenvektors. Die Zahlen ϕ = pπh und ψ = qπh nennen wir Frequenz in x- bzw. y-richtung. Die Wellenvektoren bilden als Eigenvektoren der Matrix S J eine Basis des R 2, das bedeutet ein jeder Vektor x R 2 kann in den Wellenvektoren entwickelt werden: x = N c p,q v p,q, c p,q R (3.22) p,q= Sei nun ũ die exakte Lösung des Gleichungssystems Au = f. Da das Jacobi-Verfahren gegen die exakte Lösung konvergiert, muss gelten S J ũ D f = ũ. (3.23) Sei weiterhin u [s] die Näherung des Jacobi-Verfahrens nach s Iterationen und ε [s] = ũ u [s], so kann man u [s] schreiben als u [s] = ũ ε [s]. (3.24) Nun wen wir nochmal das Jacobi-Verfahren an, so erhalten wir S J u [s] D f = S J (ũ ε [s] ) D f = ũ S J ε [s]. (3.25) 4

3 Numerische Behandlung linearer Gleichungssysteme Abbildung 3.: Eigenwerte des Jacobi-Verfahrens für den 5-Punkte-Stern mit N = 5 Wir entwickeln den Fehler ε [s] nun in den Wellenvektoren v p,q und erhalten S J ε [s] = S J N p,q= c p,q v p,q = N c p,q S J v p,q = p,q= N c p,q λ p,q v p,q. (3.26) Das bedeutet die Komponente des Fehlers zur Wellenzahl (p, q) wird in jedem Iterationsschritt um den Faktor λ p,q gedämpft. Abbildung 3. zeigt die Eigenwerte λ p,q gegen die Wellenzahlen (p, q) aufgetragen. Wir sehen, dass vor allem Fehleranteile am Rand des Spektrums, das heißt für sowohl p als auch q nahe 0 oder nahe N, schlecht bis gar nicht gedämpft werden. Das erklärt die insgesamt langsame Konvergenzrate des Verfahrens. Die gleiche Rechnung wie oben lässt sich auch mit dem Jacobi-Relaxation-Verfahren durchführen, da S J und S J,ω die gleichen Eigenvektoren haben. Allerdings stellt sich das Eigenwertspektrum etwas anders dar. Abbildung 3.2 zeigt die Eigenwerte für ω = /2. Wie wir sehen, werden in diesem Fall vor allem hochfrequente Anteile, das heißt Fehleranteile für p, q > N/2 gut gedämpft, währ niedrig-frequente Fehleranteile schlecht gedämpft werden. 4 Wir nennen dies die Glättungseigenschaft des Jacobi-Relaxations- Verfahrens. Wir wollen nun sehen, ob das Gauß-Seidel-Verfahren ebenfalls diese Glättungseigenschaft besitzt. [Ise96, S.227ff] Allerdings ist die Betrachtung hier etwas schwieriger, da die Iterationsmatrix des Gauß-Seidel-Verfahrens nicht die gleichen Eigenvektoren besitzt wie die Matrix A. Natürlich können wir den Fehler immer noch in den Wellenvektoren entwickeln, allerdings sind die Dämpfungsfaktoren nicht mehr durch die Eigenwerte der Iterationsmatrix bestimmt. Das heißt, wir müssen diese Faktoren auf anderem Wege bestimmen. Zu diesem Zweck definieren wir die bivariate Fourier-Transformations des p,q= 4 Die Plots sehen ähnlich aus, allerdings ist auf die Beschriftung der z-achse zu achten. 5

3 Numerische Behandlung linearer Gleichungssysteme Abbildung 3.2: Eigenwerte des Jacobi-Relaxation-Verfahren mit ω = /2 Fehlers p [s] (ϕ, ψ) = N k,l= ε [s] k,l ei(kϕ+lψ), 0 ϕ, ψ π. (3.27) Man kann zeigen, das die L 2 -Norm dieses Ausdrucks bis auf einen konstanten Faktor mit der euklidischen Vektornorm des Fehlers übereinstimmt. 5 Sei ũ die exakte Lösung des Gleichungssystems Au = f so gilt ( 4ũ k,l + ũ k,l + ũ k+,l + ũ k,l + ũ k,l+ ) = h 2 f k,l, k, l =,..., N. (3.28) Das Gauß-Seidel-Verfahren ist komponentenweise gegeben durch ( ) 4u [s+] k,l + u [s] k,l + u[s+] k+,l + u[s] k,l + u[s+] k,l+ = h 2 f k,l, k, l =,..., N. (3.29) Subtrahieren wir nun 3.29 von 3.28, so erhalten wir ( ) 4ε [s+] k,l + ε [s] k,l + ε[s+] k+,l + ε[s] k,l + ε[s+] k,l+ = 0, k, l =,..., N. (3.30) Wir multiplizieren 3.30 nun mit e i(kϕ+lψ) und summieren über alle k, l =,..., N, so folgt N N N 4 ε [s+] k,l e i(kϕ+lψ) + ε [s] k,l ei(kϕ+lψ) + ε [s+] k+,l ei(kϕ+lψ) +... k,l= + N k,l= k,l= ε [s] k,l ei(kϕ+lψ) + N k,l= k,l= 5 Für den Beweis der Normenäquivalenz sei verwiesen auf [Ise96, S.229]. ε [s+] k,l+ ei(kϕ+lψ) = 0. (3.3) 6

3 Numerische Behandlung linearer Gleichungssysteme Abbildung 3.3: Darstellung des Dämpfungsfaktors für Frequenzen 0 ϕ, ψ π Wir sehen hier, dass der erste Summand in 3.3 gerade gleich 4p [s+] (ϕ, ψ) ist. Die übrigen Terme wollen wir nun durch Indexverschiebungen und Ausklammern einzelner Faktoren in die Form von Gleichung 3.27 bringen. Wir nehmen an dieser Stelle periodische Randbedingungen an, das heißt, man kann annehmen, dass ε [s] k+n,l+n = ε[s] k,l gilt. 6 Damit vereinfacht sich Gleichung 3.3 zu (4 e iϕ e iψ ) Mit Gleichung 3.27 folgt N k,l= ε [s+] k,l e i(kϕ+lψ) = (e iϕ + e iψ ) N k,l= ε [s] k,l ei(kϕ+lψ). (3.32) (4 e iϕ e iψ )p [s+] (ϕ, ψ) = (e iϕ + e iψ )p [s] (ϕ, ψ) p [s+] (ϕ, ψ) p [s] (ϕ, ψ) = e iϕ + e iψ 4 e iϕ e iψ. (3.33) Die linke Seite von Gleichung 3.33 ist nun aber nichts anderes als der Faktor, mit dem die Fouriertransformierte des Fehlers im Iterationsschritt s s + multipliziert wird. Da p norm-äquivalent zu ε ist, ist dies der gesuchte Dämpfungsfaktor. Der Term rechts ist insbesondere abhängig von ϕ und ψ, aber unabhängig von s. Abbildung 3.3 zeigt den Term aus Gleichung 3.33 gegen die Frequenzen ϕ, ψ. Man sieht hier, wie beim Jacobi-Relaxation-Verfahren, dass Fehleranteile zu Frequenzen in der oberen Hälfte des Frequenzspektrums deutlich besser gedämpft werden, als solche zu niedrigen Frequenzen. Das heißt, auch das Gauß-Seidel-Verfahren besitzt die Glättungseigenschaft. 6 Nimmt man an dieser Stelle zum Beispiel homogene Dirichlet-Randbedingungen an, so entsteht im Folgen ein zusätzlicher Term, wodurch der Dämpfungsfaktor nicht mehr mathematisch sauber herzuleiten ist. Vgl. hierzu [Ise96, S.230] 7

3 Numerische Behandlung linearer Gleichungssysteme 3.5 Kontrolle des Fehlers Eine Frage, die sich bei numerischen Verfahren immer stellt, ist, ob man irgwie den Fehler der Approximation abschätzen kann. Bei der Behandlung linearer Gleichungssysteme spielt die folge Definition eine besondere Rolle. Definition 3.2 Sei u [s] die Approximation der Lösung von Au = f nach s Iterationsschritten. Das Residuum dieser Approximation ist definiert als r [s] = f Au [s]. Multipliziert man nun den Fehler mit der Matrix A erhält man Dies nennen wir die Residuumsgleichung. 3.6 Mehr Gitter ɛ [s] = u [s] ũ Aɛ [s] = Au [s] Aũ Aɛ [s] = Au [s] f Aɛ [s] = r [s]. Wir haben gesehen, dass das Jacobi-Realaxation- und das Gauß-Seidel-Verfahren hochfrequente Fehleranteile besser dämpfen, als niedrig-frequente. Die Frequenz, um die es dabei geht war (ϕ, ψ) = (pπh, qπh), p, q N, h = N. (3.34) Das heißt, die Frequenz ist einmal abhängig von der Wellenzahl (p, q), zum anderen wird sie aber auch in Relation zum Gitter gemessen, das bedeutet, sie ist auch abhängig von der Gitterweite h. Welche Frequenz ergibt sich aber, wenn wir den Wellenvektor v p,q auf ein gröberes Gitter mit Gitterweite 2h transformieren? Wir beachten hierbei, dass auf dem gröberen Gitter nur Wellenzahlen mit p, q N/2 existieren. Sei also zunächst p, q N/2. Die Transformation auf das gröbere Gitter bedeutet praktisch jeden zweiten Gitterpunkt wegzulassen, das heißt, aus v p,q k,l, k, l N wird v p,q 2k,2l, k, l N/2. Setzen wir Gleichung 3.2 ein, so folgt die Transformation sin ( pπkh ) sin ( qπlh ) sin ( pπ(2k)h ) sin ( qπ(2l)h ). (3.35) Sehen wir uns die Frequenz des transformierten Wellenvektors an, so finden wir ( ϕ, ψ) = (2pπh, 2qπh) = (2ϕ, 2ψ). (3.36) Das bedeutet, auf dem gröberen Gitter erscheint die Frequenz der ersten N/2 Wellenvektoren im Vergleich zur Darstellung auf dem feineren Gitter doppelt so groß. Insbesondere 8

3 Numerische Behandlung linearer Gleichungssysteme bedeutet das aber auch, dass sich die Frequenzen in den Bereich verschieben, in dem sie von Jacobi-Relaxation und Gauß-Seidel besser gedämpft werden. Bleibt noch die Frage was mit der anderen Hälfte des Spektrums passiert, also für p, q > N/2. Wir stellen dies der Übersichtlichkeit halber an einem eindimensionalen Wellenvektor dar. Im Eindimensionalen haben Wellenvektoren die Form v p j = sin(jpπh), j N, p N. (3.37) Wir setzen p = N 2 + η, 0 < η < N 2. Dann gilt v p,j = sin ( 2jpπh ) ( ) 2jpπ = sin N ( 2j( N 2 = sin + η)π ) ( = sin jπ + 2jηπ ) N N ( ) ( ) (N 2η)jπ (N 2η)jπ = sin 2πj + = sin N N ( ) 2(N p)jπ = sin = sin ( 2(N p)jπh ). (3.38) N Im zweidimensionalen funktioniert die Rechnung für den zweiten Sinus-Term natürlich analog. Diesmal finden wir für die Frequenzen ( ϕ, ψ) = ( 2(N p)πh, 2(N q)πh ) = ( 2π 2pπh, 2π 2qπh ) = ( 2(π ϕ), 2(π ψ) ). (3.39) Das bedeutet hohe Frequenzen erscheinen wieder niedrig-frequenter auf dem gröberen Gitter. Das sollte jedoch kein Problem sein, wenn die hochfrequenter Fehleranteile bereits vor dem Wechsel auf das gröbere Gitter gedämpft wurden. Das führt uns auf die zentrale Idee der Mehrgitterverfahren. 9

4 Das Mehrgitter-Verfahren 4. Die Idee Wir wollen noch einmal, die oben hergeleiteten Erkenntnisse zusammenfassen. Glättungseigenschaft Das Jacobi-Relaxation- und das Gauß-Seidel-Verfahren dämpfen hochfrequente Fehleranteile deutlich besser als niedrig-frequente. Residuumsgleichung Der Fehler der Approximation erfüllt sein eigenes lineares Gleichungssystem. Aε [s] = r [s] Gittertransformation Niedrig-frequente Fehleranteile erscheinen hochfrequenter auf gröberen Gittern. Das motiviert das folge Vorgehen. [Hac85, S.2ff] Zwei-Gitter Algorithmus. Gegeben seien die Matrix A R N 2 N 2, die rechte Seite f R N 2, sowie ein Startvektor u [0] R N 2 für das stationäre Iterationsverfahren. 2. Führe ν Iterationen mit dem Jacobi-Relaxation- oder dem Gauß-Seidel-Verfahren durch. (z.b. ν=2 oder ν = 3) Der Fehler sollte nun geglättet sein. 3. Berechne das Residuum r [ν] = f Au [ν]. 4. Transformiere das Residuum und die Matrix auf ein gröberes Gitter r [ν] r [ν], A Ā. 5. Löse die Residuumsgleichung auf dem gröberen Gitter ε [ν] = Ā r [ν]. 6. Transformiere das Ergebnis auf das feinere Gitter ε [ν] ε [ν]. 7. Berechne u [ν+ 2 ] = u [ν] ε [ν] 8. Führe nochmals ν Iterationen mit dem gewählten Iterationsverfahren und u [ν+ 2 ] als Startvektor durch. 20

4 Das Mehrgitter-Verfahren Abbildung 4.: Hierarchie von drei Gittern in einer Dimension. 9. Ausgabe: u [2ν+ 2 ] Allerdings lässt dieser Algorithmus noch einige Fragen unbeantwortet.. Wie funktionieren die Transformationen zwischen den Gittern? 2. Wie löst man die Residuumsgleichung auf dem gröberen Gitter? 3. Ist dieses Verfahren konvergent und wenn ja, verhält es sich wirklich besser als die oben beschriebenen Verfahren? Es sei gleich als erstes gesagt, dass wir die Frage nach der Konvergenz im Rahmen dieser Arbeit schuldig bleiben werden. 4.. Restriktion und Prolongation Wen wir uns also zunächst der ersten Frage zu. Als erstes nehmen wir an, dass auf dem feinsten Gitter, dem Gitter auf dem wir das Gleichungssystem eigentlich lösen wollen, gilt N = 2 m mit m N. Es sei daran erinnert, dass N die Anzahl an Gitterpunkten pro Koordinatenrichtung ist, dass heißt, wir haben auf dem feinsten Gitter N 2 Unbekannte. Die Gitterreduktion soll im Folgen so aussehen, dass wir in jeder Koordinatenrichtung jeden zweiten Gitterpunkt weglassen. Das entspricht einer Reduktion der Anzahl an Punkten in einer Richtung von N (N +). Abbildung 4. illustriert dieses Vorgehen. 2 Wir wollen uns zunächst den sogenannten Prolongations-Operator P ansehen, dass heißt die Transformation vom gröberen auf das feinere Gitter. Ein Weg diese Transformation zu erreichen ist lineare Interpolation. Sei (w k,l ) k,l N ein Vektor auf dem feinen Gitter, ( w k,l ) k,l N ein Vektor auf dem gröberen Gitter und N 2 die Anzahl an Gitterpunkten auf dem gröberen Gitter. Dann 2

4 Das Mehrgitter-Verfahren 2 2 2 x o x o x 4 4 4 4 2 2 o o o o o 2 x 4 2 o 4 2 2 x 2 4 2 o 2 4 2 2 Abbildung 4.2: Darstellung des Prolongations-Operators. x entspricht Gitterpunkt auf gröberen Gitter; o entspricht neu berechnetem Gitterpunkt auf feinem Gitter. x liefert die lineare Interpolation die Formeln [Ise96, S.237] w 2k,2l = w k,l k, l =,..., N (4.) w 2k,2l = 2 ( w k,l + w k,l+ ) k =,..., N ; l =,..., N w 2k,2l = 2 ( w k,l + w k+,l ) k =,..., N ; l =,..., N w 2k,2l = 4 ( w k,l + w k,l+ + w k+,l + w k+,l+ ) k, l =,..., N. Abbildung 4.2 illustriert dieses Vorgehen. In Matrixform sieht das ganze folgermaßen aus. P P 2 P P = P 2... P P 2 (4.2) Hierbei ist P eine (2 N ) 2 N 2 -Matrix mit 2 N N-Blockmatrizen P und P 2. 2 2 2 2 4 4 4 4 2 2 P 2 2 =... P 2 4 4 4 4 =... (4.3) 2 2 2 2 4 4 4 4 2 2 Bleibt die Frage nach dem Restriktions-Operator R, das heißt nach der Transformation vom feinen auf das gröbere Gitter. Hierfür gibt es verschiedene Möglichkeiten. Die 22

4 Das Mehrgitter-Verfahren einfachste wäre sicher die Methode der Injektion. Dabei lässt man die nicht benötigten Gitterpunkte ganz einfach weg. Eine beliebtere Methode ist allerdings die Volle Gewichtung (full weighting) [Ise96, S.237] w k,l = 4 w 2k,2l + 8 (w 2k,2l + w 2k,2l + w2k +, 2l + w 2k,2l+ ) +... + 6 (w 2k,2l + w 2k,2l+ + w 2k+,2l + w 2k+,2l+ ) k, l =,..., N. (4.4) Diese Methode hat den Vorteil, dass die Matrixform besonders leicht bestimmt werden kann. Es gilt dann nämlich R = 4 P T. (4.5) Wir sind nun also in der Lage, Vektoren von einem Gitter auf das andere zu transformieren. Was ist aber mit der Matrix A? Zum Lösen der Residuumsgleichung auf dem gröberen Gitter brauchen wir auch eine transformierte Form dieser Matrix. Nehmen wir wie oben an, dass wir uns lediglich mit 5-Punkte-Stern auf dem Einheitsquadrat beschäftigen, fällt diese Aufgabe leicht. Die Matrix des 5-Punkte-Sterns hat eine besonders regelmäßige Struktur, die sich insbesondere bei Verwung einer anderen Gitterweite nicht ändert. Es genügt also, die überzähligen Zeilen und Spalten einfach wegzulassen. Im Allgemeinen möchte man Differentialgleichungen aber auf komplizierteren Gebieten als dem Einheitsquadrat untersuchen. In diesem Fall kommen Randapproximationen ins Spiel. [Ise96, S.20ff] Wir wollen darauf hier nicht näher eingehen, wichtig ist aber, dass man in einem solchen Fall nicht mehr annehmen kann, dass die Matrix ihre regelmäßige Struktur behält. Ein Ausweg biete die Transformation [Bri87] Ā = RAP. (4.6) Das heißt, wenn wir eine Matrix-Vektor-Multiplikation durchführen möchten, transformieren wir den Vektor zunächst auf das feinere Gitter, multiplizieren dort mit der ursprünglichen Matrix und transformieren anschließ zurück. In diesem Zusammenhang hat es sich dann auch gelohnt, die Matrixstruktur von R und P zu analysieren. Wir können nun also zwischen den Gittern wechseln. Bleibt die Frage nach der Lösung der Residuumsgleichung. 4..2 Rekursion Im Zwei-Gitter Algorithmus wurde davon ausgegangen, dass die Residuumsgleichung auf dem gröberen Gitter exakt lösbar ist. In der Praxis kann dies sicherlich nicht immer angenommen werden. Die Lösung besteht hier natürlich darin, den Algorithmus rekursiv zu wiederholen. Das bedeutet, zum Lösen der Residuumsgleichung startet man einen erneuten Zwei-Gitter Algorithmus. Da man hier jetzt die Residuumsgleichung zu lösen hat, wählt man üblicherweise 0 als Startvektor. 23

4 Das Mehrgitter-Verfahren Jetzt wird auch klar, warum wir N = 2 m + angenommen haben. Durch diese Wahl von N erhalten wir mit der oben beschriebenen Restriktion eine absteige Folge von Gittern, wobei das gröbste Gitter noch genau vier Gitterpunkt enthält. Das entstehe Gleichungssystem ist dann sicherlich direkt lösbar. Dieses Verfahren führt auf den folgen Algorithmus. Mehrgitter Algorithmus. Gegeben seien die Matrix A R N 2 N 2 mit N = 2 m + für ein m > 0, die rechte Seite f R N 2, sowie ein Startvektor u [0] R N 2 für das stationäre Iterationsverfahren. 2. Führe ν Iterationen mit dem Jacobi-Relaxation- oder dem Gauß-Seidel-Verfahren durch. (z.b. ν=2 oder ν = 3) Der Fehler sollte nun geglättet sein. 3. Berechne das Residuum r [ν] = f Au [ν]. 4. Transformiere das Residuum und die Matrix auf ein gröberes Gitter r [ν] r [ν] = Rr [ν], A Ā = RAP, N N = (N + ). 2 5. Falls N = 2: Setze ε [ν] = Ā r [ν] Sonst: Gehe zu Schritt mit A = Ā, N = N, f = r [ν], u [0] = 0. 6. Transformiere das Ergebnis auf das feinere Gitter ε [ν] ε [ν] = P ε [ν]. 7. Berechne u [ν+ 2 ] = u [ν] ε [ν]. 8. Führe nochmals ν Iterationen mit dem gewählten Iterationsverfahren und u [ν+ 2 ] als Startvektor durch. 9. Ausgabe: u [2ν+ 2 ] 4.2 Varianten Den oben beschriebenen Algorithmus bezeichnet man auch als V-Zyklus. Der Grund für diese Bezeichnung liegt auf der Hand, man geht zunächst vom feinsten zum gröbsten Gitter und anschließ wieder zurück. Eine andere Möglichkeit ist der sogenannte W- Zyklus. Abbildung 4.3 illustriert dieses Vorgehen. Eine andere Möglichkeit bietet die sogenannte verschachtelte Iteration (nested iteration). Hierbei startet man nicht auf dem feinsten, sondern auf dem gröbsten Gitter. Die Idee dabei ist, für den eigentlichen Mehrgitter-Algorithmus (oder alternativ auch ein anderes iteratives Lösungsverfahren) einen möglichst guten Startvektor zu erhalten. Im Folgen bezeichnen wir mit f (n) die Darstellung des Vektors f auf dem Gitter mit (2 n + ) 2 Gitterpunkten. Analog für die Matrix A. Außerdem bezeichnen wir mit M G(A, f, u, m) die Ausführung eines Mehrgitter Algorithmus mit Matrix A, rechter Seite f, Startvektor u auf einem Gitter mit (2 m + ) 2 Gitterpunkten. Das liefert den folgen Algorithmus. [Hac85, S.98f] 24

4 Das Mehrgitter-Verfahren Abbildung 4.3: a) V-Zyklus; b) W-Zyklus nested iteration Algorithmus. Gegeben seien die Matrix A R N 2 N 2 mit N = 2 m + für ein m > 0 und die rechte Seite f R N 2. 2. Solange k < m a) Löse A (k) u (k) = f (k). b) Transformiere die Lösung auf das nächsthöhere Gitter u (k) u (k+) = P u (k). c) Setze u (k+) = MG(A (k+), f (k+), u (k+), k + ). d) k=k+ 3. Ausgabe: u (m ) Setzt man in Schritt 2 k < m anstatt k < m, so erhält man eine nested iteration mit anschließem V-Zyklus. Dieses Verfahren bezeichnet man dann als vollständiges Mehrgitter-Verfahren (full multi-grid). 4.3 Aufwand des Mehrgitter-Verfahrens Wie bei den anderen iterativen Verfahrens ist die Anzahl der benötigten Operationen gleich dem Produkt der Anzahl der Operationen pro Iterationsschritt das heißt in diesem Fall pro V-Zyklus und der Konvergenzrate das heißt der Anzahl an Operationen, die man benötigt, um eine bestimmte Genauigkeit zu erreichen. Schauen wir uns den V-Zyklus an. [Ise96, S.240f] Es werden auf jeder Stufe 2ν Iterationen mit dem gewählten Glättungsverfahren ausgeführt. Sei auf dem feinsten Gitter der Aufwand eines Iterationsschrittes des Glättungsverfahrens gegeben durch α. Bei der Restriktion wird die Anzahl der Unbekannten in jeder Koordinatenrichtung näherungsweise halbiert, das heißt, der Aufwand ist hier α. Der Gesamte V-Zyklus benötigt also 4 25

4 Das Mehrgitter-Verfahren bei m Gittern ( + 4 + 4 2 + 4 3 + + = ( m µ= ) ( 2να < 4 µ 4 µ µ= ) 4 m ) 2να 2να = 8 να (4.7) 3 Operationen. Wir haben gesehen, das gilt α = O(N 2 ). Das heißt, asymptotisch benötigt auch der V-Zyklus O(N 2 ) Operationen. Restriktion und Prolongation liefern auf jeder Stufe zwei weitere Matrix-Vektor-Multiplikationen mit dünn besetzten Matrizen, ändern also am asymptotischen Verhalten nichts. Es sei dazu gesagt, dass dies eben nur das asymptotische Verhalten ist. Für N nicht allzu groß kann die Konstante in Gleichung 4.7 dafür sorgen, dass andere iterative Verfahren doch besser konvergieren. Deswegen werden Mehrgitter-Verfahren vor allem bei sehr großen Gleichungssystemen sehr feinen Gittern eingesetzt. Um zu zeigen, dass das Mehrgitter-Verfahren tatsächlich optimal im Aufwand ist, müsste man nun noch zeigen, dass das Verfahren formal konvergiert und die Anzahl an benötigten V-Zyklen für eine gegebene Genauigkeit unabhängig von N ist. Wir verweisen für diesen Beweis jedoch auf [Hac85] und [Ver] und wollen uns im nächsten Kapitel stattdessen mit einer konkreten Implementierung eines Mehrgitter-Verfahrens in Matlab beschäftigen. 26

5 Implementierung Im Folgen wollen wir versuchen, ein Matlab Programm zu entwerfen, dass die Poisson- Gleichung auf dem Einheitsquadrat oder Teilmengen davon mittels finiter Differenzen diskretisiert und anschließ das entstehe Gleichungssystem mit Hilfe des Mehrgitter- Algorithmus löst. 5. Das Programm Wir wollen uns dazu zunächst mit der Realisierung des Mehrgitter-Algorithmus selbst beschäftigen. Wir benötigen dazu Ein Glättungs-Verfahren z.b. das Gauß-Seidel Verfahren Den Prolongations- und den Restriktions-Operator Den Mehrgitter-Algorithmus selbst. Wir implementieren das Gauß-Seidel Verfahren in simpler Matrixform. Das bietet sich an, da in Matlab im Allgemeinen Matrix-Vektor Operationen schneller realisiert sind als Schleifen. gsm.m function v=gsm(a,u,f,m) %Gauß-Seidel Verfahren %A Matrix, u Startvektor, f rechte Seite, m Anzahl Iterationen [D,L,R]=divM(A); v=(d-l)^(-)*r*u+(d-l)^(-)*f; if(m>0) v=gsm(a,v,f,m-); else v=v; %--------------- function [D,L,R]=divM(A) [n,n]=size(a); D=R=L=zeros(n,n); for i=:n for j=:n if(i<j) R(i,j)=-A(i,j); elseif(i>j) L(i,j)=-A(i,j); 27

5 Implementierung else D(i,j)=A(i,j); D=D; L=L; R=R; Als nächstes müssen wir den Prolongations- und Restriktions-Operator realisieren. Hier kommt uns zu Gute, dass wir die Matrixform dieser Operatoren im vorausgegangenen Kapitel bereits bestimmt haben. Es reicht natürlich einen der Operatoren zu realisieren, da die Beziehung R = 4 P T gilt. erstp.m function erg=erstp(m) A=zeros(2*m-,m); A2=zeros(2*m-,m); B=zeros(2*m-,m); B2=zeros(2*m-,m); for i=:m A(2*i-,i)=; B(2*i-,i)=; for i=:m- A2(2*i,i+)=; A2(2*i,i)=; B(2*i,i+)=/2; B(2*i,i)=/2; B2=/2*B; erg=sparse(kron(a,b)); erg2=sparse(kron(a2,b2)); erg=erg+erg2; Diese Funktion realisiert einen linearen Interpolationsoperator P : R m2 R (2m )2. Bleibt nun noch den Mehrgitter-Algorithmus, so wie es im letzten Kapitel beschrieben wurde, zu realisieren. multig.m function erg=multig(a,st,f,m,nue); % Schritt : Parameter mg=/2*(m+); % Schritt 2: Vorglättung 28

5 Implementierung erg=gsm(a,st,f,nue); % Schritt 3: Berechnung Residuum r=f-a*erg; % Erstellung von Prolongations und Restriktionsmatrix P=erstP(mg); R=/4*P ; % Schritt 4: Transfer auf gröberes Gitter rg=r*r; Ag=R*A*P; % Schritt 5: Lösung der Residuumsgleichung if(mg==2) erg2=ag\-rg; else erg2=multig(ag,zeros(mg^2,),-rg,mg,nue); if % Schritt 6: Transfer auf feineres Gitter erg3=p*erg2; % Schritt 7: Anpassung der Lösung erg4=erg-erg3; % Schritt 8: Nachglättung erg5=gsm(a,erg4,f,nue); erg=erg5; Das Programm ist im Wesentlichen selbsterklär. Wichtig ist vor allem das Abbruchkriterium der Rekursion. Da wir von einem quadratischen Gebiet mit N 2 = (2 m + ) 2 Unbekannten ausgegangen sind, können wir annehmen, dass das gröbste Gitter erreicht ist, wenn es noch genau 4 Gitterpunkte enthält. Dann würde der Restriktionsoperator versagen. Das Gleichungssystem ist an dieser Stelle simpel genug, dass man davon ausgehen kann, dass ein direktes Lösungsverfahren hier ausreich gut funktioniert. Das ist hier einfach mit Hilfe des Matlab-Befehls \ realisiert. 29

5 Implementierung 5.2 Erster Test: Einheitsquadrat Wir wollen das Programm nun testen. Eine Funktion, die auf dem Einheitsquadrat differenzierbar und am Rand gleich Null ist, ist u : R 2 R (x, y) sin(πx) sin(πy). (5.) Eine Möglichkeit die Matrix aus Gleichung 2.6 aufzustellen, ist beschrieben in [LeV07, S.68]. Das liefert das folge Testprogramm. TestMZ.m % Testprogramm für MultiG clear all; close all; % Parameter m=2^4+; h=/(m+); % Erstellung der Matrix des 5-Punkte-Sterns mit % homogenen Dirichlet-Randbedingungen I = speye(m); e = ones(m,); T = spdiags([e -4*e e],[- 0 ],m,m); S = spdiags([e e],[- ],m,m); A = (kron(i,t) + kron(s,i)) / h^2; % Wahl eines Startvektors st=zeros(m^2,); % Echte Lösung true=@(x,y) sin(pi.*x).*sin(pi.*y); % Erstellung eines Gitters tx=linspace(h,-h,m); ty=linspace(h,-h,m); [X,Y]=meshgrid(tx,ty); X=X ; Y=Y ; % Erstellung rechte Seite f und Gittervektor der echten Lösung utrue=true(x,y); utruen=reshape(utrue,m^2,); f=a*utruen; % Lösung des linearen Gleichungssystems erg=st; for i=:2 erg=multig(a,erg,f,m,2); 30

5 Implementierung erg=reshape(erg,m,m); % Erstellung der Plots figure surf(x,y,utrue); figure surf(x,y,erg); figure surf(x,y,utrue-erg); % Ausgabe der Maximumsnorm des Fehlers norm(utrue-erg,inf) Die Funktion multig realisiert genau einen V-Zyklus. Die Schleife um den Aufruf der Funktion ermöglicht die Durchführung mehrerer V-Zyklen. Es fällt zudem auf, dass wir hier als rechte Seite nicht die Gitterfunktion des Laplace der exakten Lösung gewählt haben. Stattdessen bestimmen wir die rechte Seite als Produkt der 5-Punkte-Stern-Matrix mit der Gitterfunktion der exakten Lösung. Der Grund dafür ist, dass nun die Gitterfunktion der exakten Lösung auch die exakte Lösung des linearen Gleichungssystems ist. Damit ist der angegebene Fehler genau der Fehler, der bei der Lösung des Systems entsteht. Andernfalls würde auch ein Fehler durch die Diskretisierung der Differentialgleichung entstehen. An diesem sind wir hier aber nicht interessiert. Anzahl V-Zyklen Norm des Fehlers 0.842 2 0.0029033 3 4.5242e-005 Die Gitterfunktion des Fehlers wird hier als N N-Matrix dargestellt. Als Norm dient die Zeilensummen-Norm. 5.3 Zweiter Test: Dreieck Als nächstes wollen wir nun noch versuchen, allgemeinere Gebiete zuzulassen und zwar solche, für die eine Gitterweite h existiert, sodass der Rand des Gebietes stets durch Gitterpunkte verläuft. Wir können nun das Gebiet bestimmen über die Angabe derjenigen Gitterpunkte, die auf dem Rand liegen. Wir nehmen hier grundsätzlich homogene Dirichlet-Randbedingungen an. Wenn nun der (k, l) te Gitterpunkt auf dem Rand oder außerhalb des Gebietes liegen sollte, wird die Formel des 5-Punkte-Sterns für diesen Gitterpunkt ersetzt durch die Angabe x k,l = 0 (5.2) Alle inneren Gitterpunkte werden, wie gehabt, über den 5-Punkte-Stern bestimmt. 3

5 Implementierung Abbildung 5.: a) Plot der exakten Lösung der Differentialgleichung; b) Plot der berechneten Näherung; c) Plot der Fehlers 32

5 Implementierung Um diese Vorgehensweise zu testen, wählen wir die Funktion u : R 2 R (x, y) xy( x y) (5.3) Als Gebiet wählen wir das Dreieck mit den Eckpunkten (0, 0), (0, ), (, 0). Man stellt fest, das die Funktion u gerade so gewählt ist, dass sie Null ist auf dem Rand dieses Dreiecks. Das ist im folgen Testprogramm realisiert. TestDZ.m clear all; close all; % Parameter m=2^4+; h=/(m+); % Randwerte ydown=h; yup=-h; xleft=h*ones(m,); for i=:m xright(i)=(m+-i)*h; xleft=xleft ; % Erstellung des Gitters tx=linspace(h,-h,m); ty=linspace(h,-h,m); [X,Y]=meshgrid(tx,ty); %X=X ; Y=Y ; % Erstellung der Matrix des 5-Punkte-Sterns % auf dem Einheitsquadrat I = speye(m); e = ones(m,); T = spdiags([e -4*e e],[- 0 ],m,m); S = spdiags([e e],[- ],m,m); A = (kron(i,t) + kron(s,i)) / h^2; % Herausstreichen der äußeren Punkte B=speye(m^2); for i=:m for j=:m if(x(i,j)<xleft(i) X(i,j)>xright(i) Y(i,j)<ydown Y(i,j)>yup) A((i-)*m+j,:)=B((i-)*m+j,:); 33

5 Implementierung if % Wahl eines Startvektors st=zeros(m^2,); % Erstellung der rechten Seite truecon=@(x,y) x.*y.*(.-x.-y); %exakte Lösung true=truecon(x,y); %Gitterfunktion der exakten Lösung for i=:m for j=:m if(x(i,j)<xleft(i) X(i,j)>xright(i) Y(i,j)<ydown Y(i,j)>yup) true(i,j)=0; if true=reshape(true,m^2,); f=a*true; % Lösung des lineare Gleichungssystems erg=st; for i=:3 erg=multig(a,erg,f,m,2); % Maximum des Fehlers und Plots error=erg-true; norm(error,inf) error=reshape(error,m,m); figure surf(x,y,error); true=reshape(true,m,m); figure surf(x,y,true); erg=reshape(erg,m,m); figure surf(x,y,erg); Der Vorteil dieser Vorgehensweise ist, dass unser Mehrgitter-Programm multig nicht verändert zu werden braucht. Tatsächlich genügt eine kleine Anpassung der Matrix, indem äußere Punkte als Null vordefiniert werden. 34

5 Implementierung Abbildung 5.2: a) Plot der exakten Lösung der Differentialgleichung; b) Plot der berechneten Näherung; c) Plot der Fehlers 35

5 Implementierung Anzahl V-Zyklen Norm des Fehlers 0.0023079 2.7383e-004 3.3535e-005 Wir sehen also, sowohl auf dem Einheitsquadrat als auch auf Teilmengen konvergiert das Mehrgitter-Programm gegen die exakte Lösung des Gleichungssystems. 5.4 Dritter Test: L-förmiges Gebiet Als letzten Test wählen wir ein L-förmiges Gebiet Ω = (, ) 2 \([0, ] [, 0]). Auf diesem Gebiet ist die Funktion f : Ω R (r, ϕ) r 2 3 sin ( 2 3 ϕ ) (5.4) harmonisch, das heißt f = 0. Ziel dieses Tests ist es zu zeigen, dass das Mehrgitterprogramm zwar gegen die exakte Lösung des diskreten Problems das bedeutet, des linearen Gleichungssystems konvergiert, aber nicht gegen die exakte Lösung der Differentialgleichung. Den Aufruf der exakten Lösung realisieren wir über das folge Hilfsprogramm. spez.m function erg=spez(x,y); r=@(x,y) sqrt((x).^2+(y).^2); f=@(x,y) nthroot(x.^2,3).*sin(2/3*(y)); phi=ret(x,y); erg=f(r(x,y),phi); %----------------- function erg=ret(x,y); erg=atan2(y,x); [n,m]=size(x); for i=:n for j=:m if(erg(i,j)>=0) erg(i,j)=erg(i,j); else erg(i,j)=erg(i,j)+2*pi; Die Funktion ist in Polarkoordinaten angegeben, das heißt x = r cos ϕ, y = r sin ϕ. 36

5 Implementierung if Dies ist notwig, da die Funktion in Polarkoordinaten definiert ist. Die Unterfunktion r realisiert den Radialanteil, ret realisiert den Winkelanteil. Für den Winkelanteil gibt es die Matlab-interne Funktion atan2, diese gibt den Winkel allerdings im Intervall ( π, π] an. Wir benötigen den Winkel jedoch im Intevall [0, 2π), deswegen werden alle negativen Winkel nochmal mit 2π addiert. Wir gehen zunächst wie vorher auch vor und berechnen die rechte Seite als Produkt von Matrix und Gitterfunktion der exakten Lösung. TestLZ.m clear all; close all; % Parameter m=2^4+; h=/(m+); % Randwerte ydown=h-; yup=-h; xleft=(h-)*ones(m,); for i=:m if(i<=(m-)/2) xright(i)=0; else xright(i)=-h; if xleft=xleft ; % Erstellung des Gitters tx=linspace(h-,-h,m); ty=linspace(h-,-h,m); [X,Y]=meshgrid(tx,ty); X=X ; Y=Y ; % Erstellung der Matrix des 5-Punkte-Sterns % auf dem Einheitsquadrat I = speye(m); e = ones(m,); T = spdiags([e -4*e e],[- 0 ],m,m); S = spdiags([e e],[- ],m,m); A = (kron(i,t) + kron(s,i)) / h^2; 37

5 Implementierung % Herausstreichen der äußeren Punkte B=speye(m^2); for i=:m for j=:m if(x(i,j)<xleft(i) X(i,j)>xright(i) Y(i,j)<ydown Y(i,j)>yup) A((i-)*m+j,:)=B((i-)*m+j,:); if % Wahl eines Startvektors st=zeros(m^2,); % Erstellung der rechten Seite true=spez(x,y); %exakte Lösung for i=:m for j=:m if(x(i,j)<xleft(j) X(i,j)>xright(j) Y(i,j)<ydown Y(i,j)>yup) true(i,j)=0; if true=reshape(true,m^2,); f=a*true; % Lösung des lineare Gleichungssystems erg=st; for i=: erg=multig(a,erg,f,m,2); % Maximum des Fehlers und Plots error=erg-true; norm(error,inf) error=reshape(error,m,m); figure surf(x,y,error); true=reshape(true,m,m); figure surf(x,y,true); erg=reshape(erg,m,m); figure 38

5 Implementierung surf(x,y,erg); Anzahl V-Zyklen Norm des Fehlers 0.02877 2 6.903e-004 3.4496e-005 Das berechnete Ergebnis konvergiert wie bei den beiden anderen Tests gegen die exakte Lösung. Wir wollen nun tatsächlich die Differentialgleichung diskretisieren, das heißt die rechte Seite ist die Gitterfunktion des Laplace der exakten Lösung. Hier ist darauf zu achten, dass die Funktion in diesem Test keine homogenen Randbedingungen besitzt, das heißt die Randbedingungen müssen vom Vektor der rechten Seite abgezogen werden. Das realisieren wir wir folgt. TestLZ2.m (Auszug) % Erstellung der rechten Seite true=spez(x,y); %exakte Lösung for i=:m for j=:m if(x(i,j)<xleft(j) X(i,j)>xright(j) Y(i,j)<ydown Y(i,j)>yup) true(i,j)=0; if true=reshape(true,m^2,); f=zeros(m,m); % Laplace der exakten Lösung % Randbedingungen f(:(m-)/2,)=f(:(m-)/2,)-/h^2* (spez(tx(:(m-)/2),-*ones(,(m-)/2)) ); f(,:m)=f(,:m)-/h^2*(spez(-*ones(,m),ty)); f(:m,m)=f(:m,m)-/h^2*(spez(tx,ones(,m)) ); f(m,(m+)/2:m)=f(m,(m+)/2:m)-/h^2*(spez(ones(,(m+)/2),ty((m+)/2:m))); f=reshape(f,m^2,); Anzahl V-Zyklen Norm des Fehlers 0.49565 2 0.5065 3 0.5067 Wie wir sehen, konvergiert das Verfahren nun nicht mehr. An dieser Stelle sehen wir nämlich nicht nur den Fehler, der bei der Lösung des Gleichungssystems entsteht, sondern auch den, der bei der Diskretisierung mittels 5-Punkte-Stern entsteht. Der Plot des Fehlers zeigt, dass der Fehler an der Stelle der einspringen Ecke gleichbleib hoch bleibt, das heißt, dass die Diskretiserung hier versagt. Dieses Problem wäre nur mit Hilfe eines feineren Gitters in der Nähe dieser Stelle zu lösen. 39

5 Implementierung Abbildung 5.3: Plot des Fehlers nach einem, zwei und drei V-Zyklen 40