Seereich Aquatropolis

Normale Version: angewandte Numerik - Lösung einfacher Differentialgleichungen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Vorlesung am Institut für Experimentalphysik und Ingenieurwissenschaften (Fakultät I)
Willkommen zum Kurs angewandte Numerik. In der heutigen Vorlesung werden wir uns mit der Implementierung einfacher Lösungsverfahren für gewöhnliche Differentialgleichungen befassen. Das Ziel wird dabei sein sie, ohne dass besonders Vorwissen vorausgesetzt wird, in die Lage zu versetzen Programme zu entwerfen die derartige Gleichungen als Anfangswertprobleme lösen können. Die dafür notwendigen Verfahren werde ich ihnen ohne konkreten Bezug zu einer bestimmten Programmiersprache erläutern allerdings sollten sie keine allzu großen Schwierigkeiten haben sie in einer Sprache ihrer Wahl in der sie bereits über Grundlagenwissen verfügen umzusetzen.
Bevor wir zu Differentialgleichungen kommen, befassen wir uns zunächst mit numerischen Ableitungen im Allgemeinen. Ausgangspunkt ist dabei die Definition der Ableitung einer Funktion an der Stelle X als Grenzwert

[Bild: 1.png]

In der Numerik übersetzt sich diese Definition in die diskretisierte Näherungsformel

[Bild: 2.png]

wobei der Abstand zwischen dem n-ten und dem (n+1)-ten Stützpunkt nach wie vor klein
sein sollte aber eben nicht mehr infinitesimal ist. Dies führt zu einem kleinen Problem. Da die Schrittweite in x-Richtung nun eben nicht mehr unendlich klein ist, liefert die soeben genannte Näherung strenggenommen nicht die Ableitung am n-ten Stützpunkt der Funktion sondern an einem Punkt der mittig zwischen dem n-ten und (n+1)-ten liegt. Wir können das durch eine einfache Verschiebung um eine halbe Schrittweite in x-Richtung kompensieren und erhalten dann

[Bild: 3.png]

Obwohl dieser Ausdruck wesentlich genauer ist als die rechtsseitige Näherung der Ableitung die wir zuerst aufgestellt haben, lässt er sich nicht ohne Weiteres implementieren da die Funktion f in der Numerik in der Regel durch ihre Funktionswerte an diskreten Punkten gegeben ist wobei

[Bild: 4.png]

gilt, und die Zwischenwerte nicht bekannt sind. Um unsere Näherungsformel daran anzupassen müssen wir sie wie noch einmal abändern

[Bild: 5.png]

Dieser Ausdruck entspricht der sogenannten Midpoint Methode und obwohl die Schrittweite in der Berechnung der Ableitung nun doppelt so groß ist wie die ursprünglich zur Diskretisierung der Funktion f verwendete, liefert sie im Allgemeinen bessere Ergebnisse als die rechtsseitige Ableitung die wir zuerst aufgestellt hatten.

Um den Unterschied zwischen beiden Methoden noch genauer zu verdeutlichen sind im folgenden Diagramm die relativen Genauigkeiten der rechtsseitigen numerischen Ableitung und der Ableitung nach Midpoint Methode in Abhängigkeit von der Schrittweite dx aufgetragen.

[Bild: DiffA.png]

Wie sie sehen kann die Midpoint Methode um einige Größenordnungen genauer sein. Allerdings sehen sie hier auch noch etwas anderes nämlich dass sie die Schrittweite nicht beliebig klein wählen können ohne dass sie die Genauigkeit ihrer Ergebnisse wieder verschlechtert. Der Grund dafür liegt darin dass ein Rechner nicht beliebig viele Nachkommastellen darstellen kann. Wählen sie zu kleine Schrittweite so kommt es bei der Berechnung der Differenz zu Auslöschungsfehlern die im schlimmsten Fall zu einem völlig unbrauchbaren Ergebnis führen. Die Lage des Optimums lässt sich über

[Bild: 6.png]

abschätzen wobei A hier die Maschinengenauigkeit des für ihre Berechnungen verwendeten Systems bezeichnet.

Ein weiterer Punkt den sie beachten sollten ist der, dass mit der Midpoint Methode für eine an N Punkten bestimmte Funktions f die Ableitung nur an den N-2 inneren Stützpunkten bestimmt werden kann. Um eine Abschätzung für die Ableitung auf den Randpunkten zu erhalten sollten sie andere Mittel anwenden wie zum Beispiel eine Extrapolation nach Rechts und nach Links ausgehend von den zuvor bestimmten inneren Punkten.
Nachdem sie nun mit dem Verfahren zur numerischen Bestimmung von Ableitungen vertraut sind, betrachten wir das Problem der Lösung gewöhnlicher Differentialgleichungen. Ich werde die dazu möglichen Verfahren anhand des einfachen Beispiels einer Zerfallsgleichung

[Bild: 7.png]

erörtern doch ich vertraue darauf dass sie im Stande sind das Prinzip auch auf andere Probleme zu übertragen. Diskretisieren wir die, in diesem Fall noch unbekannte Funktion y(x) so ist es ein sehr naheliegender Gedanke zunächst die Ableitung durch ihre numerische Näherung zu ersetzen

[Bild: 8.png]

und den so erhaltenen Ausdruck einfach umzustellen

[Bild: 9.png]

Diese Formel erlaubt uns nun wenn wir den Funktionswert von y am n-ten Stützpunkt kennen den Funktionswert am (n+1)-ten Stützpunkt zu bestimmen. Solange wir also einen bekannten Anfangswert zur Verfügung haben, können wir damit die gesamte Funktion y(x) berechnen die eine Lösung der gegebenen Differentialgleichung ist.

Die Formel die wir soeben hergeleitet haben stellt ein sogenanntes explizites Lösungsverfahren dar, da sie immer nur von einem bereits bekanntem Punkt ohne weitere Annahmen auf den nächsten schließt. Der Vorteil expliziter Verfahren ist, dass sie sehr leicht zu implementieren sind, allerdings sind sie für viele Probleme numerisch instabil.
Wenn sie die Vorlesung bis hierhin aufmerksam verfolgt haben sollte ihnen aufgefallen sein, dass wir bei der Herleitung des expliziten Solvers im Grunde nichts Anderes getan haben als die rechtsseitige Näherung für numerische Ableitungen anzuwenden. Wie wir zu Beginn festgestellt haben ist diese jedoch insofern ungenau dass sie eigentlich die Ableitung zwischen zwei aufeinanderfolgenden Stützpunkten bestimmt. Genaugenommen müssten wir die diskretisierte Version der Differentialgleichung also wie folgt angeben

[Bild: 10.png]

Das Problem dass es keinen (n+1/2)-ten Stützpunkt gibt umgehen wir nun dadurch, dass wir linear zwischen dem n-ten und dem (n+1)-ten interpolieren.

[Bild: 11.png]

Hierbei gehen wir auf der rechten Seite der Gleichung nun implizit davon aus bereits Informationen über den (n+1)-ten Stützpunkt zu besitzen weshalb wir in diesem Fall von einem impliziten Verfahren sprechen.

Stellen wir die Gleichnung um so erhalten wir

[Bild: 12.png]

Diese Methode ist numerisch stabiler und genauer als das explizite Verfahren. Gehen wir aber zu Vektorgleichungen über so wird aus der Division die Bildung einer inversen Matrix deren Existenz allerdings nicht garantiert ist.
Der Vollständigkeit halber werden wir nun noch kurz über vollständig implizite Verfahren sprechen. Hierbei wird die diskretisierte Form der Differentialgleichung so aufgestellt, dass auf der rechten Seite ausschließlich Informationen über den (n+1)-ten Stützpunkt vorausgesetzt werden.

[Bild: 13.png]

Was nach einer einfachen Umformung auf den Ausdruck

[Bild: 14.png]

führt. Wie schon das implizite Verfahren zuvor, ist auch diese Methode numerisch stabil allerdings auch den selben Einschränkungen in der Anwendung auf Vektorgleichungen unterworfen. Da es sich hier strenggenommen um die Anwendung einer linksseitigen Näherung der numerischen Ableitung handelt, ist die zu erwartende Genauigkeit für ein gegebenes kleines dx nicht höher als beim expliziten Verfahren.
Zum Abschluß werden wir die drei behandelten Methoden zur Lösung gewöhnlicher Differentialgleichungen noch einmal in Bezug auf ihr Verhalten bei großen dx vergleichen. Dabei wird die Lösung der hier als Beispiel behandelten Zerfallsgleichung für einen Startwert von 1 bei x=1 und einer Zerfallskonstante von 2 in blau und die durch den Solver ausgegebene Lösung für dx=1,25 in rot dargestellt.

Das explizite Verfahren konvergiert oberhalb eines kritischen dx nicht einmal mehr gegen die richtige Lösung sondern oszilliert mit steigender Amplitude zwischen positiven und negativen Werten.

[Bild: Exp.png]

Die Lösung des inmpliziten Solvers oszilliert ebenfalls, konvergiert für große x jedoch gegen die korrekte Lösung.

[Bild: Imp.png]

Das vollständig implizite Verfahren liefert in diesem Fall qualitativ die beste Übereinstimmung mit der korrekten Lösung was in Anbetracht der Tatsache dass sie in praktischen Anwendungen in der Regel danach streben werden kleine Werte für dx zu verwenden allerdings keine große Relevanz hat.

[Bild: VImp.png]

Für einen sinnvoll gewählten Wert für dx werden in dem hier betrachteten einfachen Beispiel selbstverständlich alle drei Verfahren Ergebnisse liefern die der mathematisch sauberen Lösung recht nahe kommen allerdings ist die relative Genauigkeit des impliziten Verfahrens dabei höher als die des expliziten oder vollständig impliziten.

Das wäre für heute alles. Es wäre gut wenn sie das was wir hier besprochen haben in einer Programmiersprache ihrer Wahl für ein von ihnen gewähltes Beispiel einmal selbst nachvollziehen. Sollten dabei Fragen auftreten so können wir diese im Rahmen dieses Kurses gemeinsam klären.