27.01.2014 Aufrufe

Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...

Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...

Numerische Lösung gewöhnlicher Differentialgleichungen - imng ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!