Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...
Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...
Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Numerische</strong> Lösung<br />
gewöhnlicher <strong>Differentialgleichungen</strong><br />
J. Hörner<br />
Universität Stuttgart (IMNG)<br />
E-Mail: Joerg.Hoerner@mathematik.uni-stuttgart.de<br />
http://www.<strong>imng</strong>.uni-stuttgart.de/LstNumGeoMod/Hoerner/<br />
1 / 39
Landau-Symbole<br />
Grundlagen<br />
∣<br />
f (h) ∈ O(g(h)) : lim sup<br />
h→a<br />
∣<br />
f (h) ∈ o(g(h)) : lim sup<br />
h→a<br />
∣ f (h)<br />
g(h)<br />
∣ f (h)<br />
g(h)<br />
∣ = c < ∞<br />
∣ = 0<br />
◮ In dieser Vorlesung wird nur a = 0 verwendet und deshalb nicht weiter<br />
erwähnt.<br />
◮ Es wird oft (wie auch in dieser Vorlesung) ein Gleichheitszeichen statt<br />
dem ∈-Symbol verwendet<br />
Beispiel:<br />
4h 2 + 7h 3 + 6h 4 + · · · = O(h 2 ) = o(h)<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 2 / 39
Taylor-Polynom<br />
Grundlagen<br />
Eine Funktion f (x) kann in der Umgebung einer Stelle x 0 durch das<br />
Taylor-Polynom vom Grad n approximiert werden:<br />
f (x) ≈ T n (x) = f (x 0 )<br />
+ f ′ (x 0 )(x − x 0 )<br />
+ f ′′ (x 0 )<br />
(x − x 0 ) 2<br />
2<br />
+ . . . + f (n) (x 0 )<br />
(x − x 0 ) n<br />
n!<br />
n∑ f (k) (x 0 )<br />
=<br />
(x − x 0 ) k<br />
k!<br />
k=0<br />
Für den Approximationsfehler gilt mit x − x 0 = h<br />
f (x) − T n (x) = O(h n+1 )<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 3 / 39
Grundlagen<br />
Zweidimensionales Taylor-Polynom<br />
Entsprechend kann eine Funktion f (x, y) in zwei Variablen in der<br />
Umgebung einer Stelle (x 0 , y 0 ) durch ein Taylor-Polynom vom Grad n<br />
approximiert werden.<br />
T n (x, y) = f (x 0 , y 0 )<br />
+ . . . =<br />
+ f x (x 0 , y 0 )(x − x 0 ) + f y (x 0 , y 0 )(y − y 0 )<br />
+ f xx(x 0 , y 0 )<br />
(x − x 0 ) 2 + f xy(x 0 , y 0 )<br />
(x − x 0 )(y − y 0 )<br />
2<br />
1<br />
+ f yy(x 0 , y 0 )<br />
(y − y 0 ) 2<br />
2<br />
n∑<br />
k∑<br />
k=0 l=0<br />
∂ l<br />
(∂x) l<br />
∂ k−l<br />
(∂y) k−l f (x 0 , y 0 )<br />
l!(k − l)! (x − x 0) l (y − y 0 ) k−l<br />
Für den Approximationsfehler gilt mit h = max(x − x 0 , y − y 0 )<br />
f (x, y) − T n (x, y) = O(h n+1 )<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 4 / 39
Taylor-Polynom<br />
Grundlagen<br />
f (x + h) = f (x) + f ′ (x)h + f ′′ (x)<br />
h 2 + · · · + f (n) (x)<br />
h n + O(h n+1 )<br />
2<br />
n!<br />
n∑ f (k) (x)<br />
=<br />
h k + O(h n+1 )<br />
k!<br />
k=0<br />
f (x + h x , y + h y ) = f (x, y) + f x (x, y)h x + f y (x, y)h y<br />
+ f xx(x, y)<br />
hx 2 + f xy (x, y)h x h y + f yy(x, y)<br />
hy 2 + . . .<br />
2<br />
2<br />
n∑ k∑ ∂ l ∂ k−l f (x, y)<br />
=<br />
(∂x) l (∂y) k−l l!(k − l)! hl xhy k−l + O(h n+1 )<br />
k=0 l=0<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 5 / 39
Motivation<br />
Erstes Verfahren<br />
◮ Aufgabe: Bestimmung der Bewegung eines Pendels<br />
u(t)<br />
r<br />
ru(t)<br />
F<br />
G<br />
Auslenkungswinkel: u(t)<br />
Auslenkung:<br />
ru(t)<br />
Geschwindigkeit: v(t) = ru ′ (t)<br />
Beschleunigung: a(t) = ru ′′ (t)<br />
Gewichtskraft: G = mg<br />
Beschleunigende Kraft: F (t) = −G sin(u(t))<br />
Newton Kraftgesetz: F (t) = a(t)m<br />
◮ Differentialgleichung: u ′′ (t) = − g r sin(u(t))<br />
◮ Mit bekannten Verfahren nicht lösbar<br />
(Keine geschlossen darstellbare Lösung)<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 6 / 39
Erstes Verfahren<br />
Euler-Verfahren<br />
◮ Ausgangspunkt:<br />
u ′ (t) = f (t, u) , u(t 0 ) = u 0<br />
◮ Verfahren: Schrittweise Berechnung von Näherungen u l ≈ u(t l ) an<br />
Punkten t 1 < t 2 < · · · < t n aus den vorherigen Daten.<br />
◮ Einfachste Möglichkeit (Euler-Verfahren):<br />
Neue Approximation durch lineare Taylor-Entwicklung an der alten<br />
Approximation<br />
u l+1 = u l + (t l+1 − t l ) f (t l , u l )<br />
} {{ }<br />
≈u ′ (t l )<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 7 / 39
Erstes Verfahren<br />
Erstes Programm zum Euler-Verfahren<br />
Schreiben Sie eine Matlab-Funktion u=euler exp(t,u0,c), die die<br />
Differentialgleichung u ′ = c ∗ u mit dem Anfangswert u0 zu den<br />
Zeitpunkten t = (t 0 , t 1 , ..., t n ) mit dem Euler-Verfahren approximiert.<br />
◮ Testen Sie Ihr Programm mit unterschiedlichen Anfangswerten.<br />
◮ Testen Sie Ihr Programm mit unterschiedlichen Konstanten c.<br />
◮ Vergleichen Sie Ihre Lösungen mit der exakten Lösung u = u 0 exp(ct) .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 8 / 39
Erstes Verfahren<br />
Umwandlung einer DGl höherer Ordnung in ein System<br />
erster Ordnung<br />
Eine Differentialgleichung höherer Ordnung<br />
a n u (n) (t) + a n−1 u(n − 1)(t) + · · · + a 1 u ′ (t) + a 0 u(t) = f (t)<br />
kann durch Einführen von neuen Variablen v 1 = u, v 2 = u ′ , . . . , v n = u n−1<br />
in ein System von Difgferentialgleichungen erster Ordnung transformiert<br />
werden:<br />
v 1 ′ = u ′ = v 2<br />
v 2 ′ = u ′′ = v 3<br />
.<br />
v n ′ = u (n) = (f (t) − a 0 v 1 − a 1 v 2 − · · · − a n−1 v n ) /a n<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 9 / 39
Erstes Verfahren<br />
Pendelgleichung mit dem Euler-Verfahren<br />
Schreiben Sie eine Matlab-Funktion u=eulerpendel(t,u0,r), die die<br />
Auslenkungen eines Pendels der Länge r und Anfangswerten u0 zu den<br />
Zeitpunkten t = (t 0 , t 1 , ..., t n ) mit dem Euler-Verfahren approximiert.<br />
◮ Transformieren Sie die Gleichung 2. Ordnung zunächst auf ein System<br />
erster Ordnung.<br />
◮ Es werden zwei Anfangswerte benötigt. Auslenkung und<br />
Geschwindigkeit.<br />
◮ Für jeden Zeitschritt sind zwei neue Werte zu bestimmen.<br />
◮ Testen Sie Ihr Programm mit 1000 und 10000 Punkten im Intervall<br />
[0, 10] für kleine (≈ π/10) und große (≈ 9π/10) Startauslenkungen<br />
und unterschiedliche Pendellängen. Plotten Sie die Auslenkung u über<br />
der Zeit t.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 10 / 39
Erstes Verfahren<br />
Funktionen als Parameter von Matlab-Funktionen<br />
◮ Funktion können in Matlab als Zeichenketten oder Funktions-Handles<br />
übergeben werden.<br />
◮ Zeichenkette mit dem Funktionsnamen: fct=’sin’<br />
◮ Zeichenkette mit Inlinefunktion fct=’3*x.^2*sin(x)’<br />
◮ Funktions-Handle:<br />
fct=@sin ,<br />
fct=@(x,y)a.*y.*sin(x) (a muss eine definierte Variable sein)<br />
◮ Alle Varianten können mit feval(fct,par1,par2,...) ausgewertet<br />
werden, z.B. feval(’sin’,pi)<br />
◮ Funktions-Handles können auch in Funktionsschreibweise verwendet<br />
werden: fct(x,y)<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 11 / 39
Erstes Verfahren<br />
Programm zum Euler-Verfahren (2)<br />
◮ Schreiben Sie eine Matlab-Funktion f=pendel_fct(t,u,r), die<br />
die rechte Seite Pendel-Differentialgleichung auswertet.<br />
◮ Modifizieren Sie die Funktion eulerpendel zu einer Funktion<br />
u=euler(fct,t,u0), die mit einem übergebenen Funktions-Handle<br />
arbeitet.<br />
◮ Rufen sie die modifizierte Funktion mit dem Funktions-Handle<br />
@(t,u)pendel_fct(t,u,r) auf. (r vorab definieren) und vergleichen<br />
Sie das Ergebnis mit dem entsprechenden Aufruf der alten Funktion<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 12 / 39
Allgemeine Verfahren<br />
<strong>Numerische</strong> Lösung von Anfangswertproblemen<br />
Lösung eines Anfangswertproblems<br />
u ′ = f (t, u) , u(t 0 ) = u 0<br />
durch sukzessive Berechnung von Näherungen u l ≈ u(t l ) für eine monoton<br />
wachsende Folge t 0 , t 1 , ... mit hinreichend kleinen Schrittweiten<br />
h l = t l+1 − t l durch<br />
u l+1 = u l + h l Φ(u l+1 , u l , u l−1 , . . . , t l , h l , f )<br />
◮ Φ heißt Verfahrensfunktion.<br />
◮ Ist Φ von m bereits bestimmten Näherungen u l , u l−1 , . . . , u l−m+1<br />
abhängig, so ist das Verfahren ein m-Schrittverfahren.<br />
◮ Ist Φ von u l+1 unabhängig, so heißt das Verfahren explizit, sonst<br />
implizit.<br />
Das Euler-Verfahren ist ein explizites Einschrittverfahren mit<br />
Verfahrensfunktion Φ(...) = f (t l , u l ) .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 13 / 39
Konvergenzordnung<br />
Diskretisierungsfehler und Ordnung<br />
Der (lokale) Diskretisierungsfehler ∆ gibt an, welchen Fehler das Verfahren<br />
bei einem Schritt, ausgehend von exakten Daten einer glatten Lösung im<br />
Verhältnis zur Schrittweite h erzeugt.<br />
∆(t, h) = u(t l+1) − u l+1<br />
h<br />
u(t + h) − u(t)<br />
= − Φ(u, t, h, f )<br />
h<br />
Ein Verfahren, bei dem der Diskretisierungsfehler wie h o gegen Null strebt,<br />
wenn h gegen Null strebt, heißt Verfahren der Ordnung o.<br />
Bei einem Einschrittverfahren hat dann auch der globale Fehler diese<br />
Ordnung.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 14 / 39
Konvergenzordnung<br />
Ordnung des Euler-Verfahrens<br />
Für das Euler-Verfahren ist<br />
∆(t, h) =<br />
u(t + h) − u(t)<br />
− Φ(u, t, h, f )<br />
h<br />
=<br />
u(t + h) − u(t)<br />
− f (u, t)<br />
h<br />
= u(t) + hu′ (t) + h 2 /2u ′′ (t) + ... − u(t)<br />
− u ′ (t)<br />
h<br />
= h 2 u′′ (t) + ... = O(h)<br />
Das Euler-Verfahren ist ein Verfahren erster Ordnung ,d.h. bei Halbierung<br />
der Schrittweite wird auch der Fehler ungefähr halbiert.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 15 / 39
Trapezregel<br />
Implizites Verfahren<br />
Ein einfaches implizites Einschritt-Verfahren ist die Trapezregel. Hierbei<br />
wird als Verfahrensfunktion der Mittelwert aus den Ableitungen an der<br />
alten und der neuen Approximation gebildet:<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l+1 )<br />
2<br />
Bei impliziten Verfahren muss zur Bestimmung der neuen Approximation<br />
in der Regel ein nichtlineares Gleichungssystem gelöst werden. Bei der<br />
Pendelgleichung:<br />
h<br />
w l+1 −<br />
2 v h<br />
l+1 = w l +<br />
2 v l<br />
v l+1 + hg<br />
2r<br />
sin(w l+1 ) = v l − hg<br />
2r<br />
sin(w l )<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 16 / 39
Implizites Verfahren<br />
Ordnung der Trapezregel<br />
Für die Trapezregel ist<br />
∆(t, h) =<br />
=<br />
u(t + h) − u(t)<br />
− Φ(u, t, h, f )<br />
h<br />
u(t + h) − u(t)<br />
−<br />
h<br />
f (t, u(t)) + f (t + h, u(t + h))<br />
2<br />
= u(t) + hu′ (t) + h 2 /2u ′′ (t) + h 3 /6u ′′′ (t)... − u(t)<br />
h<br />
− u′ (t) + u ′ (t) + hu ′′ (t) + h 2 /2u ′′′ (t) + ...<br />
2<br />
= u ′ (t) + h 2 u′′ (t) + h2<br />
6 u′′′ (t) + ... − u ′ (t) − h 2 u′′ (t) − h2<br />
4 u′′ (t)<br />
= − h2<br />
12 u′′ (t) + ... = O(h 2 )<br />
Die Trapezregel hat Ordnung 2.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 17 / 39
Implizites Verfahren<br />
Programm zur Trapezregel<br />
Schreiben Sie eine Matlab-Funktion u=eulerexp(t,u0,c), die die<br />
Lösung der Differentialgleichung u ′ (t) = cu mit dem Euler-Verfahren<br />
bestimmt.<br />
Modifizieren Sie die Funktion zu u=trapezexp(t,u0,c), die die<br />
Trapezregel verwendet.<br />
Plotten Sie für unterschiedliche c und Schrittweiten den Fehler der beiden<br />
Verfahren.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 18 / 39
Implizites Verfahren<br />
Testat-Aufgabe 2007<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
a) Geben Sie die allgemeine Iterationsvorschrift für das (explizite)<br />
Euler-Verfahren an und führen Sie einen Schritt mit Schrittweite 1<br />
aus, d.h. berechnen Sie einen Näherungswert für die Lösung an der<br />
Stelle t 1 = 2.<br />
b) Geben Sie die allgemeine Iterationsvorschrift für die Trapezregel an<br />
und führen Sie einen Schritt mit Schrittweite 1 aus, d.h. berechnen<br />
Sie einen Näherungswert für die Lösung an der Stelle t 1 = 2.<br />
d) Führen Sie mit der Trapezregel zwei Schritte mit Schrittweite 1/2<br />
aus, d.h. berechnen Sie Näherungswerte für die Lösung an den Stellen<br />
t 1 = 3/2 und t 2 = 2.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 19 / 39
Implizites Verfahren<br />
Testat-Aufgabe 2007 Lösung Teil a)<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
a) Geben Sie die allgemeine Iterationsvorschrift für das (explizite)<br />
Euler-Verfahren an und führen Sie einen Schritt mit Schrittweite 1<br />
aus, d.h. berechnen Sie einen Näherungswert für die Lösung an der<br />
Stelle t 1 = 2.<br />
Lösungsvorschlag:<br />
Die allgemeine Iterationsvorschrift des Euler-Verfahren ist<br />
u l+1 = u l + (t l+1 − t l )f (t l , u l ) .<br />
Setzt man die gegebenen Werte ein erhält man<br />
u 1 = u 0 + (t 1 − t 0 )f (t 0 , u 0 ) = 1 + 3 · 1/1 = 4 .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 20 / 39
Implizites Verfahren<br />
Testat-Aufgabe 2007 - Lösung Teil b)<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
b) Geben Sie die allgemeine Iterationsvorschrift für die Trapezregel an<br />
und führen Sie einen Schritt mit Schrittweite 1 aus, d.h. berechnen<br />
Sie einen Näherungswert für die Lösung an der Stelle t 1 = 2.<br />
Lösungsvorschlag:<br />
Die allgemeine Iterationsvorschrift der Trapezregel ist<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l+1 )<br />
2<br />
Setzt man die gegebenen Werte ein erhält man<br />
u 1 = 1 + 1 3 · 1/1 + 3 · u 1/2<br />
2<br />
⇒ u 1 /4 = 5/2 ⇒ u 1 = 10 .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 21 / 39
Implizites Verfahren<br />
Testat-Aufgabe 2007 - Lösung Teil d)<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
d) Führen Sie mit der Trapezregel zwei Schritte mit Schrittweite 1/2<br />
aus, d.h. berechnen Sie Näherungswerte für die Lösung an den Stellen<br />
t 1 = 3/2 und t 2 = 2.<br />
Lösungsvorschlag:<br />
Mit der Formel aus b) ergibt sich<br />
und<br />
u 1 = 1 + 1/2 3 · 1/1 + 3 · u 1/(3/2)<br />
2<br />
u 2 = 7/2+1/2 3 · (7/2)/(3/2) + 3 · u 2/2<br />
2<br />
⇒ u 1 /2 = 7/4 ⇒ u 1 = 7/2<br />
⇒ 5u 2 /8 = 21/4 ⇒ u 2 = 42/5<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 22 / 39
Runge-Kutta Verfahren<br />
Weitere Einschrittverfahren<br />
◮ Euler-Verfahren:<br />
u l+1 = u l + h l f (t l , u l )<br />
Explizites Verfahren erster Ordnung<br />
◮ Trapez-Regel<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l+1 )<br />
2<br />
Implizites Verfahren zweiter Ordnung<br />
◮ Ersetze u l+1 in der Trapez-Regel durch Euler Verfahren<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l + h l f (t l , u l ))<br />
2<br />
Explizites Verfahren, Ordnung ?<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 23 / 39
Diskretisierungsfehler<br />
Runge-Kutta Verfahren<br />
Diskretisierungsfehler<br />
∆(t, h) = u′ (t)<br />
2<br />
− u′ (t)<br />
2<br />
+ h 2 u′′ (t) + h2<br />
6 u′′′ (t)<br />
− h 2 u′′ (t) − h2<br />
4<br />
(<br />
u ′′′ (t) − f u (t, u)u ′′ (t) ) + O(h 3 )<br />
2-stufiges Runge-Kutta-Verfahren<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l + h l f (t l , u l ))<br />
2<br />
Explizites Verfahren zweiter Ordnung<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 24 / 39
Runge-Kutta-Verfahren<br />
Runge-Kutta Verfahren<br />
◮ Einschrittverfahren, bei dem für die Verfahrensfunktion Φ die rechte<br />
Seite f an Stellen ausgewertet wird, die selbst durch Auswertung von<br />
f entstehen<br />
Φ = . . . f (. . . f (. . . f (. . . ) . . . ) . . . ) . . .<br />
◮ Berechnung von n Hilfsgrößen (n-stufiges Verfahren)<br />
⎛<br />
⎞<br />
n∑<br />
y i = f ⎝t + c i h, v + h a i,j y j<br />
⎠ , c i =<br />
j=1<br />
n∑<br />
j=1<br />
a i,j<br />
◮ Gewichtete Summe<br />
n∑<br />
w = v + h b j y j<br />
j=1<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 25 / 39
Runge-Kutta-Verfahren<br />
Runge-Kutta Verfahren<br />
◮ Parametermatrix<br />
R =<br />
( ) A c<br />
b t =<br />
⎛<br />
⎜<br />
⎝<br />
⎞<br />
a 1,1 · · · a 1,n c 1<br />
.<br />
. .. . .<br />
⎟<br />
a n,1 · · · a n,n c n<br />
⎠<br />
b 1 · · · b n<br />
◮ Explizite Verfahren<br />
a i,j = 0 ,<br />
d.h. das obere Dreieck von A ist null.<br />
j ≥ i<br />
◮ Ordnung von Parametern abhängig.<br />
Explizite Verfahren schwer konstruierbar und nur für wenige<br />
Ordnungen bekannt.<br />
Implizite Verfahren mit beliebig hoher Ordnung konstruierbar.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 26 / 39
Beispiel<br />
Runge-Kutta Verfahren<br />
Verfahren<br />
Hilfgrößen<br />
u l+1 = u l + h l<br />
f (t l , u l ) + f (t l + h l , u l + h l f (t l , u l ))<br />
2<br />
Parametermatrix<br />
y 1 = f (t l , u l )<br />
y 2 = f (t l + h l , u l + h l y 1 )<br />
( y1<br />
u l+1 = u l + h<br />
2 + y )<br />
2<br />
2<br />
R =<br />
(<br />
⎛<br />
)<br />
A c ⎜<br />
b t = ⎝<br />
⎞<br />
0<br />
⎟<br />
1 1 ⎠<br />
1<br />
2<br />
1<br />
2<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 27 / 39
Runge-Kutta Verfahren<br />
Klassisches Runge-Kutta-Verfahren<br />
y 1 = f (t l , u l ) , y 2 = f ( t l + h 2 , u l + h y 1<br />
2<br />
)<br />
y 3 = f ( t l + h 2 , u l + h y )<br />
2<br />
2<br />
, y4 = f (t l + h, u l + hy 3 )<br />
u l+1 = u l + h ( y 1<br />
6<br />
+ y 2<br />
3<br />
+ y 3<br />
3<br />
+ y )<br />
4<br />
6<br />
Explizites 4-stufiges Verfahren vierter Ordnung<br />
Parametermatrix<br />
⎛<br />
⎞<br />
0<br />
( )<br />
1<br />
1<br />
A c<br />
2<br />
2<br />
1<br />
1<br />
R =<br />
b t =<br />
0<br />
⎜<br />
2<br />
2<br />
⎟<br />
⎝ 0 0 1 1 ⎠<br />
1<br />
6<br />
1<br />
3<br />
1<br />
3<br />
1<br />
6<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 28 / 39
Testat-Aufgabe 2007<br />
Runge-Kutta Verfahren<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
c) Berechnen Sie einen Näherungswert für die Lösung an der Stelle<br />
t 1 = 2 in dem Sie einen Schritt mit Schrittweite 1 mit dem klassischen<br />
Runge Kutta Verfahren durchführen, das die Parametermatrix<br />
hat.<br />
⎛<br />
⎞<br />
0 0 0 0 0<br />
( )<br />
1<br />
1<br />
A c<br />
2<br />
0 0 0 2<br />
R =<br />
b t =<br />
1<br />
1<br />
⎜ 0<br />
2<br />
0 0 2 ⎟<br />
⎝ 0 0 1 0 1 ⎠<br />
1<br />
6<br />
1<br />
3<br />
1<br />
3<br />
1<br />
6<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 29 / 39
Runge-Kutta Verfahren<br />
Testat-Aufgabe 2007 - Lösung Teil c)<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
c) Klassisches Runge Kutta Verfahren mit Schrittweite 1<br />
Lösungsvorschlag:<br />
Die Hilfsgrößen berechnen sich sukzessive zu<br />
y 1 = f (t 0 , u 0 ) = 3 1 1 = 3 ,<br />
y 2 = f (t 0 + 1/2, u 0 + y 1 /2) = 3 5/2<br />
3/2 = 5 ,<br />
y 3 = f (t 0 + 1/2, u 0 + y 2 /2) = 3 7/2<br />
3/2 = 7 ,<br />
y 4 = f (t 0 + 1, u 0 + y 3 ) = 3 8 2 = 12<br />
und damit ist<br />
u 1 = 1 + 3 + 2 · 5 + 2 · 7 + 12<br />
6<br />
= 15/2 .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 30 / 39
Runge-Kutta Verfahren<br />
Programm zum Runge-Kutta-Verfahren<br />
Schreiben Sie eine Matlab-Funktion<br />
v=runge_kutta_schritt(fct,u,t,h,R), das für die<br />
Differentialgleichung mit rechter Seite fct ausgehend von der Näherung u<br />
zum Zeitpunkt t einen Schritt der Weite h des durch die Parametermatrix<br />
R definierten Runge-Kutta-Verfahrens durchführt.<br />
◮ Ermittel Sie die Anzahl der notwendigen Zwischenschritte aus der<br />
Größe von R.<br />
◮ Gehen Sie von einem expliziten Verfahren aus.<br />
◮ Erzeugen Sie die Linearkombinationen mit Hilfe einer Matrix-Vektor<br />
Multiplikation.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 31 / 39
Runge-Kutta Verfahren<br />
Programm zum Runge-Kutta-Verfahren<br />
Schreiben Sie eine Matlab-Funktion<br />
u=runge_kutta_classic(fct,t,u0), das eine Differentialgleichung mit<br />
dem klassischen Runge-Kutta-Verfahren löst und wenden Sie es auf die<br />
Pendelgleichung an.<br />
Die Parametermatrix des klassischen Runge-Kutta Verfahren ist:<br />
⎛<br />
⎞<br />
0<br />
( )<br />
1<br />
1<br />
A c<br />
2<br />
2<br />
1<br />
1<br />
R =<br />
b t =<br />
0<br />
⎜<br />
2<br />
2<br />
⎟<br />
⎝ 0 0 1 1 ⎠<br />
1<br />
6<br />
1<br />
3<br />
1<br />
3<br />
1<br />
6<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 32 / 39
Fehlerschätzung (1)<br />
Fehlerschätzung<br />
Der lokale Fehler der bei einem Zeitschritt mit Weite h entsteht kann<br />
geschätzt werden indem ein Zeitschritt mit dem gleichen Verfahren mit der<br />
halben Schrittweite h/2 nochmal berechnet wird.<br />
Bei einem Verfahren der Ordnung m liefert dies<br />
( ) h m<br />
|u h − u| ≈ ch m , |u h/2 − u| ≈ c<br />
2<br />
⇒ |u h − u| ≈ 2 m |u h/2 − u| ⇒ |u h − u h/2 | ≈ (2 m − 1)|u h/2 − u|<br />
Der Schätzwert für den globalen Fehler genaueren Approximation ist also<br />
∣<br />
∣u<br />
|u h/2 h − u h/2∣ ∣<br />
− u| ≈<br />
2 m − 1<br />
und für den lokalen Fehler entsprechend<br />
∣<br />
∣u h − u h/2∣ ∣ h<br />
d loc ≈<br />
2 m − 1 2<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 33 / 39
Testat-Aufgabe 2007<br />
Fehlerschätzung<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
d) Führen Sie mit der Trapezregel zwei Schritte mit Schrittweite 1/2<br />
aus, d.h. berechnen Sie Näherungswerte für die Lösung an den Stellen<br />
t 1 = 3/2 und t 2 = 2.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 34 / 39
Fehlerschätzung<br />
Testat-Aufgabe 2007 – Lösung Teil e)<br />
Gegeben ist die Differentialgleichung<br />
u ′ (t) = f (t, u) = 3u/t , u(t 0 ) = u 0 , t 0 = 1, u 0 = 1 .<br />
e) Schätzen Sie den Fehler des in d) berechneten Näherungswertes für<br />
die Stelle t = 2.<br />
Lösungsvorschlag:<br />
Die Trapezregel hat Ordnung 2 und somit läßt sich der Fehler bei<br />
Berechnung mit halber Schrittweite schätzen als<br />
δ = |u1 − u 1/2 |<br />
2 2 − 1<br />
=<br />
10 − 42/5<br />
3<br />
= 8/15 .<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 35 / 39
Fehlerschätzung<br />
Fehlerschätzung (2)<br />
Eine andere Möglichkeit der Fehlerschätzung ist zwei Verfahren<br />
Unterschiedlicher Ordnung anzuwenden.<br />
Haben die Verfahren die Ordnungen m 2 > m 1 ist<br />
|u v 1<br />
− u| = c 1 h m 1<br />
, |u v 2<br />
− u| = c 2 h m 2<br />
Gilt für die Konstanten c 1 ≈ c 2 kann dies mit d = m 2 − m 1 umgeformt<br />
werden zu<br />
|u v 1<br />
− u| ≈ |u v 2<br />
− u|h −d ⇒ |u v 1<br />
− u v 2<br />
| ≈ |u v 2<br />
− u|(h −d − 1)<br />
Ist h d
Eingebettetes Runge-Kutta Verfahren<br />
Verfahren von Dormand-Prince<br />
◮ Parametermatrix<br />
⎛<br />
⎜<br />
⎝<br />
1<br />
5<br />
3<br />
40<br />
9<br />
40<br />
44<br />
− 56<br />
45 15<br />
19372<br />
− 25360<br />
6561 2187<br />
9017<br />
− 355<br />
3168 33<br />
35<br />
384<br />
0<br />
35<br />
384<br />
0<br />
32<br />
9<br />
64448<br />
− 212<br />
6561 729<br />
46732<br />
5247<br />
500<br />
1113<br />
500<br />
1113<br />
0<br />
1<br />
5<br />
3<br />
10<br />
4<br />
5<br />
8<br />
9<br />
49<br />
− 5103<br />
1<br />
176 18656<br />
125<br />
− 2187<br />
192 6784<br />
125<br />
− 2187<br />
192 6784<br />
11<br />
84<br />
1<br />
11<br />
84<br />
0<br />
⎞<br />
⎟<br />
⎠<br />
◮ Ordnung 5<br />
◮ Verfahren der Ordnung 4 mit ˜b t = ( 5179 7571<br />
57600<br />
, 0,<br />
16695 , 393<br />
640 , − 92097<br />
339200 , 187<br />
2100 , )<br />
1<br />
40<br />
◮ Wird von der Matlab-Funktion ode45 verwendet.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 37 / 39
Schrittweitensteuerung<br />
Schrittweitensteuerung<br />
◮ Schrittweite h sollte an das Problem angepasst sein<br />
◮ klein um Toleranz einzuhalten<br />
◮ groß für wenige Schritte<br />
◮ globaler Fehler ɛ(t 1 − t 0 ) ⇒ lokaler Fehler |d loc | ≤ ɛh<br />
◮ Optimale Schrittweite bei Verfahren der Ordnung m:<br />
h opt = h(ɛh/|d loc |) 1/m .<br />
◮ Schätzung des lokalen Fehlers ⇒ Korrekturfaktor < 1<br />
◮ Schrittweite nicht zu schnell vergrößern<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 38 / 39
MATLAB ODE Löser<br />
Lösung von ODE mit Matlab<br />
Lösen Sie die Pendelgleichung mit Hilfe der Matlab-Funtion ode45.<br />
Verwenden Sie unterschiedliche Toleranzen und untersuchen Sie die<br />
verwendeten Schrittweiten.<br />
J. Hörner <strong>Numerische</strong> Mathematik, Modul 3 39 / 39