v1.3 – Schrittweitensteuerung

 

Die lokale Schrittweite muss einerseits möglichst groß sein, um Rechenaufwand zu sparen, andererseits klein genug, um den Fehler klein zu halten. Erschwerend kommt bei der Wahl der lokalen Schrittweite hinzu, dass der lokale Fehler oft stark schwankt. Der Ausweg liegt in einer adaptiven Schrittweitensteuerung. Das Ziel ist dabei, die Schrittweite so anzupassen, dass der lokale Fehler in jedem Schritt etwa gleich einer vorgegebenen Größe \varepsilon ist.

1.3.1 Schätzung des lokalen Fehlers

Um dieses Ziel zu erreichen, muss man in jedem Schritt den lokalen Fehler schätzen. Dazu berechnet man zwei Näherungswerte für y\left( {{t_{k+1}}} \right), einen mit einem Verfahren p-ter Ordnung und einen mit einem Verfahren \left( {p+1} \right)-ter Ordnung. Für die lokalen Fehler gilt:

\ell _\tau ^{\left( p \right)}\left( t \right) = \frac{{y\left( {t+\tau } \right)-y\left( t \right)}}{\tau }-{\Phi ^{\left( p \right)}}\left( {t,y\left( t \right),\tau ,f} \right)

\ell _\tau ^{\left( {p+1} \right)}\left( t \right) = \frac{{y\left( {t+\tau } \right)-y\left( t \right)}}{\tau }-{\Phi ^{\left( {p+1} \right)}}\left( {t,y\left( t \right),\tau ,f} \right)

Da \ell _\tau ^{\left( {p+1} \right)} \ll \ell _\tau ^{\left( p \right)} ist, gilt:

\ell _\tau ^{\left( p \right)} \approx \ell _\tau ^{\left( p \right)}-\ell _\tau ^{\left( {p+1} \right)} = {\Phi ^{\left( {p+1} \right)}}\left( {t,y\left( t \right),\tau ,f} \right)-{\Phi ^{\left( p \right)}}\left( {t,y\left( t \right),\tau ,f} \right)

Nun ist

\left| {\ell _\tau ^{\left( p \right)}\left( t \right)} \right| \approx C{\tau ^p}\quad \Rightarrow \quad C \approx \frac{{\left| {\ell _\tau ^{\left( p \right)}\left( t \right)} \right|}}{{{\tau ^p}}},\quad \quad \left| {\ell _{\tau ,neu}^{\left( p \right)}\left( t \right)} \right| \approx C\tau _{neu}^p

mit einer unbekannten Konstanten C. Erreichen wollen wir z.B. \left| {\ell _{\tau ,neu}^{\left( p \right)}\left( t \right)} \right| \approx \varepsilon, also gilt:

\varepsilon \approx C\tau _{neu}^p \approx \frac{{\left| {\ell _\tau ^{\left( p \right)}\left( t \right)} \right|}}{{{\tau ^p}}}\tau _{neu}^p\quad \Rightarrow \quad \tau _{neu}^p = \frac{{\varepsilon {\tau ^p}}}{{\left| {\ell _\tau ^{\left( p \right)}\left( t \right)} \right|}}\quad \Rightarrow \quad {\tau _{neu}} = \frac{{{\varepsilon ^{\frac{1}{p}}}}}{{{{\left| {\ell _\tau ^{\left( p \right)}\left( t \right)} \right|}^{\frac{1}{p}}}}}\tau

1.3.2 Algorithmus

i = 0
while ti < T and tj + tau > ti do
	if ti+tau > T then
		tau = T-ti
	end if
	Phi1 = Phi(p)(ti, ui, tau, f)
	Phi2 = Phi(p+1)(ti, ui, tau, f)
	l = norm(Phi1 – Phi2)
	if l < epsilon then
		ti+1 = ti+tau
		ui+1 = ui+tau * Phi1
		i = i+1
	end if
	if l y epsilon / 2 or l > epsilon then
		tau = tau * (epsilon / l)1/p
	end if
end while

Eventuell kann man statt auf absolute Fehler auf relative Fehler testen. Dazu ersetzt man \varepsilon durch \varepsilon \nu, wobei \nu = \left\| {{u_i}} \right\|+1 ist. Eventuell gibt man auch maximale und minimale Schrittweiten vor, die nicht über- oder unterschritten werden dürfen.

1.3.3 Eingebettete Runge-Kutta-Verfahren

Verfahren mit Schrittweitensteuerung sind mit einem erhöhten Aufwand verbunden. Insbesondere benötigt die Berechnung von {\Phi _2} mindestens p+1 Auswertungen von f. Die Idee der eingebetteten Verfahren ist es, die {f_{i,k}} noch einmal zu verwenden, die schon zur Berechnung von {\Phi _1} benötigt wurden.

Fehlberg gab 1969 eine Kombination eines Verfahrens 2. Ordnung

\begin{array}{*{20}{c}}  1 &\vline & 1 & {} \\ \hline{} &\vline & {\frac{1}{2}} & {\frac{1}{2}} \\   \end{array}

mit einem Verfahren 3. Ordnung

\begin{array}{*{20}{c}}  1 &\vline & 1 & {} & {} \\{\frac{1}{2}} &\vline & {\frac{1}{4}} & {\frac{1}{4}} & {} \\ \hline{} &\vline & {\frac{1}{6}} & {\frac{1}{6}} & {\frac{2}{3}} \\   \end{array}

an. Man kann beide Tabellen zusammenfassen zu

\begin{array}{*{20}{c}}  1 &\vline & 1 & {} & {} \\{\frac{1}{2}} &\vline & {\frac{1}{4}} & {\frac{1}{4}} & {} \\ \hline{{\Phi _1}} &\vline & {\frac{1}{2}} & {\frac{1}{2}} & {} \\{{\Phi _2}} &\vline & {\frac{1}{6}} & {\frac{1}{6}} & {\frac{2}{3}} \\   \end{array}

Andere Beispiele:

  • Vierstufige Runge-Kutta-Fehlberg-Methode 2(3)
  • Sechsstufige Runge-Kutta-Fehlberg-Methode 4(5)
  • Dormand-Prince-Methode 4(5)

Ähnliche Artikel

Kommentar verfassen