Schrittweitensteuerung bei Einschrittverfahren¶
Lernziele¶
Sie implementieren ein explizites Runge-Kutta-Verfahren mit eingebettetem Fehlerschätzer zuerst mit konstanter Schrittweite und dann mit Schrittweitensteuerung. Sie testen Ihre Implementierung an einem Modellproblem.
Theorie¶
Ein eingebettetes Runge-Kutta-Verfahren (Steigungsform) der Ordnung \(p(\hat{p})\) (\(p \neq \hat{p}\)) ist von der Form
wobei in jedem RK-Schritt aus denselben Steigungen \(r_1,r_2,\dots,r_s\) zwei Näherungen \(y_{k+1}\) bzw. \(\hat{y}_{k+1}\) mit Verfahren der Konsistenzordnung \(p\) bzw. \(\hat{p}\) berechnet werden (üblicherweise gilt \(|p-\hat{p}| = 1\)). Anhand des Fehlerschätzers \(T := |y_{k+1}-\hat{y}_{k+1}| \approx \eta\) wird entschieden, ob der Wert \(y_{k+1}\) akzeptiert wird und ob die Schrittweite verändert werden soll. Eine mögliche Strategie dafür ist (mit einer Fehlerschranke \(\mathrm{tol} > 0\)):
Dies tun wir so lange, bis wir bei der Endstelle angekommen sind. Das Ziel der Schrittweitensteuerung ist, die Endstelle mit einer minimalen Anzahl Schritte zu erreichen, wobei die vorgegebene Genauigkeit in jedem Schritt eingehalten wird.
Bemerkungen:
Für einen fairen Vergleich mit anderen RK-Verfahren ist zu beachten, dass auch abgelehnte Schritte Rechenzeit kosten! Einige häufig verwendete eingebettete Runge-Kutta-Verfahren sind
Autor(en)
Jahr
Ordnung
Stufen
Bemerkung
Fehlberg
1969
4(5)
6
zwei unterschiedliche Verfahren,
die beide mit RKF45 bezeichnet werden
Dormand,
Prince
1980
5(4)
7
DOPRI5, verwendet in MATLABs
ode45
und in
scipy.integrate.ode
Bogacki,
Shampine
1989
3(2)
4
verwendet in MATLABs
ode43
Cash-Karp
1990
5(4)
6
verwendet in LabVIEW
Falls die Schrittweite \(h\) akzeptiert wird, dann wird immer die Näherung \(y_{k+1}\) (mit Ordnung \(p\)) übernommen, um die Steigungen im nächsten RK-Schritt zu berechnen. Die Näherung \(\hat{y}_{k+1}\) (mit Ordnung \(\hat{p}\)) wird nur zur Berechnung des Fehlerschätzers verwendet. Daher funktioniert z. B. ein eingebettetes Runge-Kutta-Verfahren der Ordnung \(5(4)\) anders als eines der Ordnung \(4(5)\)!
Aufträge¶
(Test-Programme mit konstanter Schrittweite) Mit diesem Test wird sichergestellt, dass Sie alle Koeffizienten des Butcher-Tableaus richtig eingeben.
Schreiben Sie zwei Programme zur Lösung eines AWPs mit den in RKF45 verwendeten Verfahren gemäss den Butcher-Tableaus
\[\begin{split}\renewcommand{\arraystretch}{1.2} \begin{array}{ll} \textrm{Ordnung 4:} & \textrm{Ordnung 5:}\\ \begin{array}{c|cccccc} 0 & \\ \frac{2}{9} & \frac{2}{9}\\ \frac{1}{3} & \frac{1}{12} & \frac{1}{4}\\ \frac{3}{4} & \frac{69}{128} & -\frac{243}{128} & \frac{135}{64}\\ 1 & -\frac{17}{12} & \frac{27}{4} & -\frac{27}{5} & \frac{16}{15}\\ \frac{5}{6} & \frac{65}{432} & -\frac{5}{16} & \frac{13}{16} & \frac{4}{27} & \frac{5}{144}\\ \hline & \frac{1}{9} & 0 & \frac{9}{20} & \frac{16}{45} & \frac{1}{12} & 0 \end{array} & \begin{array}{c|cccccc} 0 & \\ \frac{2}{9} & \frac{2}{9}\\ \frac{1}{3} & \frac{1}{12} & \frac{1}{4}\\ \frac{3}{4} & \frac{69}{128} & -\frac{243}{128} & \frac{135}{64}\\ 1 & -\frac{17}{12} & \frac{27}{4} & -\frac{27}{5} & \frac{16}{15}\\ \frac{5}{6} & \frac{65}{432} & -\frac{5}{16} & \frac{13}{16} & \frac{4}{27} & \frac{5}{144}\\ \hline & \frac{47}{450} & 0 & \frac{12}{25} & \frac{32}{225} & \frac{1}{30} & \frac{6}{25} \end{array} \end{array}\end{split}\](die sechs Stufen sind bei beiden Verfahren identisch!). Verwenden Sie die Programmstruktur für explizite Runge-Kutta-Verfahren aus dem Praktikum 9, wobei Sie jetzt in jedem RK-Schritt sechs Steigungen berechnen müssen.
Lösen Sie mit Ihren Programmen aus 1. das Anfangswertproblem
\[y' + \frac{x^2}{y} = 0, \quad y(0) = -4.\]Berechnen Sie für \(X=2\) und \(N=2^{j-1}\), \(j \in \{1,2,\dots,12\}\), jeweils die absoluten Fehler an der Endstelle (\(y(2) = -4\sqrt{\frac{2}{3}}\)). Zeichnen Sie die Fehler gegen die Schrittweiten \(h=\frac{2}{N}\) in einer doppelt logarithmischen Darstellung, und überzeugen Sie sich grafisch von den Konvergenzordnungen \(p=4\) bzw. \(p=5\) der beiden Verfahren.
Schreiben Sie ein Programm zur Lösung eines AWPs mit RKF45 mit Schrittweitensteuerung:
(3)¶\[\begin{split}\renewcommand{\arraystretch}{1.2} \begin{array}{c|cccccc} 0 & \\ \frac{2}{9} & \frac{2}{9}\\ \frac{1}{3} & \frac{1}{12} & \frac{1}{4}\\ \frac{3}{4} & \frac{69}{128} & -\frac{243}{128} & \frac{135}{64}\\ 1 & -\frac{17}{12} & \frac{27}{4} & -\frac{27}{5} & \frac{16}{15}\\ \frac{5}{6} & \frac{65}{432} & -\frac{5}{16} & \frac{13}{16} & \frac{4}{27} & \frac{5}{144}\\ \hline y_{k+1} & \frac{1}{9} & 0 & \frac{9}{20} & \frac{16}{45} & \frac{1}{12} & 0\\ \hat{y}_{k+1} & \frac{47}{450} & 0 & \frac{12}{25} & \frac{32}{225} & \frac{1}{30} & \frac{6}{25} \end{array}\end{split}\](gleiche Koeffizienten wie in 1.!). Verwenden Sie die Programmstruktur (vgl. Abbildung 3.8 im Skript):
Testen Sie Ihr Programm aus 3. indem Sie das AWP aus 2. mit RKF45 für \(\mathrm{tol} = 10^{-j}\), \(j \in \{1,2,\dots,12\}\), lösen. Berechnen Sie jeweils den maximalen absoluten Fehler \(\displaystyle \max_k|y_k - y(x_k)|\).
Hinweis: exakte Lösung \(\displaystyle y(x) = -\sqrt{16-\frac{2}{3}x^3}\), \(x \leq 2 \cdot 3^{1/3}\).
Abgabe¶
Bitte geben Sie Ihre Lösungen bis spätestens vor dem nächsten Praktikum ab.