Zeitschrittkontrolle
Differentialgleichungen – Kapitel 13
M. Ladecký, L. Pastewka
IMTEK, Universität Freiburg
Lernziele
Die Studierenden sollen…
- … das Konzept der automatischen Zeitschrittkontrolle beschreiben können.
- … das Prinzip eingebetteter Runge-Kutta-Verfahren zur Fehlerschätzung erklären können.
- … den Zusammenhang zwischen Toleranzparametern und Genauigkeit erklären können.
- … ein einfaches Runge-Kutta-Verfahren mit adaptiver Schrittweite implementieren können.
- … die Toleranzparameter von
solve_ivp sinnvoll wählen können.
Motivation
- Bisher: Runge-Kutta-Verfahren mit konstantem Zeitschritt \(\Delta t\)
- Problem: Lösung ändert sich oft zeitweise schnell, zeitweise langsam → fester Zeitschritt muss für die schnellste Phase klein genug sein → in langsamen Phasen verschwenderisch
- Automatische Zeitschrittkontrolle: \(\Delta t\) wird dynamisch an die lokale Dynamik angepasst
- Zentrales Element: Fehlerschätzung — eingebettete Runge-Kutta-Verfahren liefern sie ohne zusätzliche Funktionsauswertungen
Eingebettete Runge-Kutta-Verfahren
Idee: Aus denselben Steigungen \(\mathbf{k}_1, \ldots, \mathbf{k}_s\) zwei Lösungen unterschiedlicher Ordnung berechnen: \[
\mathbf{y}_{n+1} = \mathbf{y}_n + \Delta t \sum_{i=1}^s b_i \mathbf{k}_i, \qquad
\hat{\mathbf{y}}_{n+1} = \mathbf{y}_n + \Delta t \sum_{i=1}^s \hat{b}_i \mathbf{k}_i
\]
Die Differenz dient als Schätzung des lokalen Fehlers: \[
\mathbf{e} = \mathbf{y}_{n+1} - \hat{\mathbf{y}}_{n+1} = \Delta t \sum_{i=1}^s (b_i - \hat{b}_i) \mathbf{k}_i
\]
- Höherwertige Lösung wird für die Zeitpropagation verwendet
- Fehlerschätzung hat die niedrigere Ordnung → konservative Schätzung
Das RK23-Verfahren (Bogacki-Shampine)
Eingebettetes Verfahren der Ordnung 3(2) mit vier Stufen: \[
\begin{aligned}
\mathbf{k}_1 &= \mathbf{g}(\mathbf{y}_n, t_n) \\
\mathbf{k}_2 &= \mathbf{g}\left(\mathbf{y}_n + \tfrac{\Delta t}{2} \mathbf{k}_1, t_n + \tfrac{\Delta t}{2}\right) \\
\mathbf{k}_3 &= \mathbf{g}\left(\mathbf{y}_n + \tfrac{3\Delta t}{4} \mathbf{k}_2, t_n + \tfrac{3\Delta t}{4}\right) \\
\mathbf{k}_4 &= \mathbf{g}(\mathbf{y}_{n+1}, t_{n+1})
\end{aligned}
\]
- \(\mathbf{k}_4\) kann im nächsten Schritt wiederverwendet werden → effektiv nur drei neue Funktionsauswertungen pro Schritt (FSAL)
RK23: Lösung und Fehlerschätzer
Lösung dritter Ordnung (für die Zeitpropagation): \[
\mathbf{y}_{n+1} = \mathbf{y}_n + \frac{\Delta t}{9} \left( 2\mathbf{k}_1 + 3\mathbf{k}_2 + 4\mathbf{k}_3 \right) + \mathcal{O}(\Delta t^4)
\]
Eingebettete Lösung zweiter Ordnung (für die Fehlerschätzung): \[
\hat{\mathbf{y}}_{n+1} = \mathbf{y}_n + \frac{\Delta t}{24} \left( 7\mathbf{k}_1 + 6\mathbf{k}_2 + 8\mathbf{k}_3 + 3\mathbf{k}_4 \right) + \mathcal{O}(\Delta t^3)
\]
Fehlerschätzer aus der Differenz: \[
\mathbf{e} = \frac{\Delta t}{72} \left( -5\mathbf{k}_1 + 6\mathbf{k}_2 + 8\mathbf{k}_3 - 9\mathbf{k}_4 \right) + \mathcal{O}(\Delta t^4)
\]
Schrittweitensteuerung: Toleranz
Vergleich des Fehlers \(\mathbf{e}\) mit einer benutzerdefinierten Toleranz: \[
\epsilon_\mathrm{tol} = \mathrm{atol} + \mathrm{rtol} \cdot |\mathbf{y}_{n+1}|
\]
Skalierter Fehler (euklidische oder Maximumsnorm): \[
\epsilon = \left\| \frac{\mathbf{e}}{\epsilon_\mathrm{tol}} \right\|
\]
- \(\epsilon \le 1\): Schritt akzeptiert
- \(\epsilon > 1\): Schritt verworfen, Wiederholung mit kleinerer Schrittweite
- In beiden Fällen: Schrittweite für den nächsten Schritt anpassen
Schrittweitensteuerung: Anpassung
Fehler eines Verfahrens der Ordnung \(p\) skaliert wie \(\Delta t^{p+1}\) → optimale neue Schrittweite: \[
\Delta t_\mathrm{neu} = \Delta t_\mathrm{alt} \cdot \epsilon^{-1/(p+1)}
\]
In der Praxis mit Sicherheitsfaktor \(S < 1\) (typisch \(S = 0{,}9\)): \[
\Delta t_\mathrm{neu} = S \cdot \Delta t_\mathrm{alt} \cdot \epsilon^{-1/(p+1)}
\]
- Sicherheitsfaktor vermeidet häufige Schrittablehnungen
- Zusätzlich: Begrenzung der Schrittweitenänderung pro Schritt
Testproblem: Van-der-Pol-Oszillator
Klassischer nichtlinearer Oszillator: \[
\ddot{x} - \mu(1 - x^2)\dot{x} + x = 0
\qquad\Rightarrow\qquad
\dot{x} = v, \quad \dot{v} = \mu(1 - x^2)v - x
\]
- \(|x| < 1\): negative Dämpfung — treibt das System an
- \(|x| > 1\): positive Dämpfung — bremst
- Ergebnis: stabiler Grenzzyklus mit Relaxationsoszillationen (langsame Phasen + schnelle Übergänge) — ideal für adaptive Verfahren
Adaptives RK23 in Aktion
- Schnelle Phasen: Schrittweite drastisch reduziert; langsame Phasen: große Schritte
- Skalierter Fehler bleibt stets unter der Toleranzgrenze 1
Vergleich mit solve_ivp
solve_ivp verwendet standardmäßig RK45 (eingebettetes Paar 5(4))
- Prinzip der Schrittweitensteuerung identisch zum selbstimplementierten RK23
- Eigene RK23-Implementierung liefert vergleichbare Lösungen und ähnliche Schrittanzahl wie SciPy
RK23
RK45 benötigt weniger Schritte als RK23: höhere Ordnung erlaubt größere Zeitschritte
- Für die Praxis: professionell getestete Implementierung in SciPy verwenden
Einfluss der Toleranzwahl
- Kleinere Toleranz → mehr Schritte, aber genauere Ergebnisse
- Unterhalb von \(\sim 10^{-14}\): Rundungsfehler dominieren
Empfehlungen für die Toleranzwahl
rtol steuert die relative Genauigkeit, atol die Genauigkeit für Werte nahe null
- Schnelle Visualisierungen, explorative Rechnungen:
rtol=1e-3, atol=1e-6
- Produktionsrechnungen:
rtol=1e-6, atol=1e-9
- Höchste Genauigkeit (deutlich höherer Aufwand):
rtol=1e-10, atol=1e-13
- Grenze: Maschinengenauigkeit bei \(\sim 10^{-14}\)
Steife Differentialgleichungen
System mit sehr unterschiedlichen Zeitskalen, z. B.: \[
\dot{y}_1 = -1000\, y_1 + y_2, \qquad
\dot{y}_2 = y_1 - y_2
\]
- Eigenwerte \(\lambda_1 \approx -1000\), \(\lambda_2 \approx -1\) → Zeitkonstanten \(\tau_1 = 0{,}001\) und \(\tau_2 = 1\) (Verhältnis 1000:1)
- Explizite Verfahren (RK23, RK45): sehr kleine Schritte nötig, um stabil zu bleiben — ineffizient
- Abhilfe: implizite Verfahren wie
Radau oder BDF
Explizit vs. implizit beim steifen Problem
Radau und BDF benötigen bei gleicher Genauigkeit deutlich weniger Funktionsauswertungen
- Faustregel: Wenn
RK45 ungewöhnlich viele Schritte braucht → Problem ist vermutlich steif
Zusammenfassung
- Automatische Zeitschrittkontrolle: Schrittweite passt sich der lokalen Dynamik an — optimale Balance aus Genauigkeit und Aufwand
- Eingebettete Verfahren (RK23, RK45): zwei Lösungen unterschiedlicher Ordnung aus denselben Auswertungen; Differenz = lokaler Fehlerschätzer
- Schrittweitenanpassung: \(\Delta t_\mathrm{neu} = S \cdot \Delta t_\mathrm{alt} \cdot \epsilon^{-1/(p+1)}\)
- Toleranzen
rtol/atol steuern Genauigkeit vs. Rechenaufwand
- Steife Probleme: implizite Verfahren (
Radau, BDF) statt expliziter Runge-Kutta-Verfahren verwenden