Explizite mehrstufige Runge-Kutta-Verfahren

Lernziele

  • Sie implementieren einige explizite mehrstufige Runge-Kutta-Verfahren auf einem Rechner,

unter Verwendung der Programmstruktur aus dem Praktikum 8.

  • Sie testen Ihre Programme an einfachen Modellproblemen und wenden sie schliesslich auf ein

komplexeres Problem an, um die numerischen Lösungen zu vergleichen.

Theorie

In diesem Praktikum betrachten wir explizite \(s\)-stufige Runge-Kutta-Verfahren

(1)\[\begin{split}\begin{array}{c|c} \boldsymbol{c} & \boldsymbol{A}\\ \hline & \boldsymbol{b}^{\top} \end{array} = \begin{array}{c|ccccc} c_1 &\\ c_2 & a_{21}\\ c_3 & a_{31} & a_{32}\\ \vdots & \vdots & \ddots & \ddots\\ c_s & a_{s1} & a_{s2} & \cdots & a_{s,s-1}\\ \hline & b_1 & b_2 & \cdots & b_{s-1} & b_s \end{array}\end{split}\]

Bemerkung: Bei expliziten Verfahren ist es üblich, die Nulleinträge auf der Hauptdiagonale und auf den oberen Nebendiagonalen der Matrix \(\boldsymbol{A}\) des Butcher-Tableaus nicht aufzuschreiben.

Aufträge

  1. Schreiben Sie die Verfahren (1) in Standardform auf (s. auch Übungsblatt 9).

  2. (\(s=2\)) Schreiben Sie ein Programm zur Lösung eines AWPs mit den Verfahren

    \[\begin{split}\begin{array}{ccc} \textrm{Runge} & \qquad & \textrm{Heun} \\ \begin{array}{c|cc} 0 & \\ \frac{1}{2} & \frac{1}{2} \\ \hline & 0 & 1 \end{array} & \qquad & \begin{array}{c|cc} 0 & \\ 1 & 1 \\ \hline & \frac{1}{2} & \frac{1}{2} \end{array} \end{array}\end{split}\]

    Verwenden Sie dafür dieselbe Programmstruktur wie für das Euler-vorwärts-Verfahren im Praktikum 8, wobei Sie einfach noch eine zweite Steigung berechnen.

  3. Testen Sie Ihre Programme aus 2. anhand des Modellproblems \(y' = -4y\), \(y(0) = 1\), mit Endstelle \(X =1\) und \(N=10\) Schritten. Vergleichen Sie die Werte \(y_i\) der numerischen Lösung mit den Werten der exakten Lösung, \(y(x_i)\), \(i \in \{0,1,\dots,10\}\).

  4. (\(s=4\)) Schreiben Sie ein Programm zur Lösung eines AWPs mit dem klassischen vierstufigen Runge-Kutta-Verfahren (RK4):

    \[\begin{split}\begin{array}{c|cccc} 0 & \\ \frac{1}{2} & \frac{1}{2}\\ \frac{1}{2} & 0 & \frac{1}{2}\\ 1 & 0 & 0 & 1\\ \hline & \frac{1}{6} & \frac{1}{3} & \frac{1}{3} & \frac{1}{6} \end{array}\end{split}\]

    Verwenden Sie dieselbe Programmstruktur wie in 2., wobei Sie einfach noch zwei weitere Steigungen berechnen.

  5. Testen Sie Ihr Programm wie in 3.

  6. Lösen Sie mit Ihren Programmen aus 2. und 4. das Anfangswertproblem

    \[y' + \frac{x^2}{y} = 0, \quad y(0) = -4.\]

    Berechnen Sie für \(X=2\) und \(N=3^j\), \(j \in \{1,2,3,4,5,6,7,8\}\), jeweils die absoluten Fehler an der Endstelle (\(y(2) = -4\sqrt{\frac{2}{3}}\)).

  7. (optional) Der Rechenaufwand für ein explizites \(s\)-stufiges Runge-Kutta-Verfahren mit \(N \in \mathbb{N}\) Schritten ist einfach \(sN\) (Anzahl der Auswertungen der rechten Seite \(f\) der gDgl). Ein explizites RK-Verfahren mit \(s > 1\) Stufen ist also \(s\)-mal aufwändiger als das einstufige Euler-vorwärts-Verfahren aus dem Praktikum 8. Der globale Fehler nimmt aber für grössere \(s\) viel schneller ab mit \(N\) als der Aufwand zunimmt, weshalb mehrstufige RK-Verfahren zumindest für grosse Probleme (wo die Auswertung von \(f\) teuer ist) sehr lohnenswert sind.

    Überzeugen Sie sich davon, indem Sie für das einstufige Euler-vorwärts-Verfahren aus dem Praktikum 8 und für die drei in diesem Praktikum implementierten mehrstufigen RK-Verfahren ein sog. Genauigkeits-Aufwand-Diagramm für das AWP aus 6. erstellen, d. h. den globalen Fehler (“Genauigkeit”) gegen den Rechenaufwand in einer doppelt logarithmischen Darstellung aufzeichnen.

    Bemerkung: Die “Genauigkeits”-Achse wird in diesen Diagrammen üblicherweise invertiert, weil ein kleinerer globaler Fehler eine grössere Genauigkeit bedeutet.

Abgabe

Bitte geben Sie Ihre Lösungen bis spätestens vor dem nächsten Praktikum ab.