0% fanden dieses Dokument nützlich (0 Abstimmungen)
2 Ansichten7 Seiten

Numerisches Programmieren, Übungen: Musterlösung 9. Übungsblatt: Gewöhnliche Differentialgleichungen (ODE)

Das Dokument behandelt die Lösungen zu einem Übungsblatt über gewöhnliche Differentialgleichungen (ODE) an der Technischen Universität München. Es umfasst die analytische und numerische Lösung von Anfangswertproblemen, die Diskussion der Kondition dieser Probleme sowie die Anwendung des Euler-Verfahrens auf Zinsberechnungen. Die Ergebnisse zeigen, dass höhere Ordnung der numerischen Verfahren zu besseren Approximationen der analytischen Lösungen führen.

Hochgeladen von

chiangmit8
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
2 Ansichten7 Seiten

Numerisches Programmieren, Übungen: Musterlösung 9. Übungsblatt: Gewöhnliche Differentialgleichungen (ODE)

Das Dokument behandelt die Lösungen zu einem Übungsblatt über gewöhnliche Differentialgleichungen (ODE) an der Technischen Universität München. Es umfasst die analytische und numerische Lösung von Anfangswertproblemen, die Diskussion der Kondition dieser Probleme sowie die Anwendung des Euler-Verfahrens auf Zinsberechnungen. Die Ergebnisse zeigen, dass höhere Ordnung der numerischen Verfahren zu besseren Approximationen der analytischen Lösungen führen.

Hochgeladen von

chiangmit8
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

Technische Universität München WiSe 25/26

School of Computation, Information and Technology


Prof. Dr. Hans-Joachim Bungartz
Manuel Geiger
Marc Marot-Lassauzaie

Numerisches Programmieren, Übungen


Musterlösung 9. Übungsblatt: Gewöhnliche Differentialgleichungen (ODE)

1) Kondition von Anfangswertproblemen


a) Berechnen Sie die analytische Lösung y(t) der beiden folgenden gewöhnlichen Differential-
gleichungen (ODE) mithilfe der Separation der Variablen:
i) ẏ(t) = 2y(t) ii) ẏ(t) = −2y(t)
b) Gegeben seien folgende Anfangswertbedingungen für die jeweiligen ODEs aus a). Berechnen
Sie nun die analytische Lösung der daraus resultierenden Anfangswertprobleme (AWP):
i) ẏ(t) = 2y(t), y(0) = 3, t ≥ 0 ii) ẏ(t) = −2y(t), y(0) = y0 , t ≥ 0.
c) Diskutieren Sie jeweils die Kondition der beiden AWP aus b).

Lösung:
a) i) Die Lösung des ODEs bestimmen wir mittels Separation der Variablen:
dy
= 2y
dt
dy
= dt
2y
Z y
1 Z t
dη = dτ
y0 2η t0
1
(ln |y| − ln |y0 |) = t − t0
2
y(t)
= e2(t−t0 )
y0
y(t) = ±y0 · e2(t−t0 )
y(t0)=y0
y(t) = y0 · e2(t−t0 )

ii) Analog zum ODE (a) ergibt sich hier die Lösung
y(t) = y0 · e−2(t−t0 ) .

b) i) Da für t = 0 = t0 als Anfangswert y(t = 0) = 3 gegeben ist, muss für die AWP
Lösung
y(t) = 3 · e2t
gelten.
ii) Analog zu i) ergibt sich mit t0 = und y(0) = y0 :
y(t) = y0 · e−2t .

c) Wenden wir uns nun der Betrachtung der (absoluten) Kondition zu:
i) Im Fall von gestörten Anfangswerten
yε (0) = y0 + ε
erhalten wir als Lösung des gestörten AWPs
yε (t) = (y0 + ε) · e2t .
Der Fehler nimmt folglich mit fortschreitender Zeit t zu:
|yε (t) − y(t)| = |ε| · e2t → ∞ für t → ∞
⇒ schlecht-konditioniertes Problem!
ii) y(t) = y0 · e−2t .
Wir erhalten als Lösung des gestörten AWPs
yε (t) = (y0 + ε) · e−2t .
Der Fehler wird gedämpft:
|yε (t) − y(t)| = |ε| · e−2t → 0 für t → ∞
⇒ gut-konditioniertes Problem!

2) Einschrittverfahren
Gegeben sei das folgende Anfangswertproblem:
ẏ(t) = t · y(t), y(0) = 1, t ≥ 0.
a) Berechnen Sie die analytische Lösung y(t) des AWPs mit Hilfe der Separation der Variablen!
b) Berechnen Sie im Intervall [0; 4] numerische Lösungswerte yk , welche die Lösung y(t) in den
Stellen tk approximieren, d.h. yk ≈ y(tk ). Rechnen Sie mit Schrittweite tk+1 − tk = δt = 1
und verwenden Sie die folgenden Verfahren:
i) Explizites Euler-Verfahren:
Bei diesem Verfahren wird lediglich die Steigung im aktuellen Punkt tk zur Berechnung
der numerischen Lösung betrachtet:
tk = t0 + k · δt;
yk+1 = yk + δt · f (tk , yk );

ii) Verfahren von Heun:


Analog zur Trapezregel bei der Quadratur wird bei diesem Verfahren im Vergleich
zum Euler-Verfahren ein zweiter f -Wert zur numerischen Berechnung der Steigung
hinzugezogen:
tk = t0 + k · δt;
δt
yk+1 = yk + · (f (tk , yk ) + f (tk+1 , yk + δt · f (tk , yk ))) ;
2
iii) Klassisches Runge-Kutta-Verfahren (Zusatz):
Analog zur Fassregel werden hier Zwischenwerte Ti für die Näherung der Steigung
berechnet und mit 1/6 gewichtet:

tk = t0 + k · δt;
T1 = f (tk , yk );
δt δt
T2 = f (tk + , yk + T1 );
2 2
δt δt
T3 = f (tk + , yk + T2 );
2 2
T4 = f (tk+1 , yk + δtT3 );
δt
yk+1 = yk + · (T1 + 2T2 + 2T3 + T4 ) ;
6

Vergleichen Sie die Ergebnisse der einzelnen Verfahren mit der analytischen Lösung. Was
stellen Sie fest und wie lässt sich dies deuten?

Lösung:
a) Wir berechnen die Separation (Trennung) der Variablen für ẏ(t) = t · y(t) = F (t) · G(y)
mit F (t) = t und G(y) = y:

dy
= F (t) · G(y)
dt
dy
= F (t)dt
G(y)
Z y
1 Z t
dη = F (τ )dτ
y(0) G(η) 0
Z y
1 Z t
dη = τ dτ
y(0) η 0
2
t
ln|y| − ln|y(0)| =
| {z } 2
=0
t2
|y(t)| = e 2 , t ∈ [0; b]
t2
y(t) = ±e , 2 t ∈ [0; b]
t2
Wegen y(0) = 1 > 0 gilt y(t) = +e 2 , t > 0.

b) Wir berechnen im Intervall [a; b] = [0; 4] zu den äquidistanten Zeitpunkten tk = t0 + k · δt,


k = 1, 2, 3, 4 eine numerische Approximation.
i) Explizites Euler-Verfahren:

y1 = y0 + δt · f (t0 , y0 ) = 1 + 1 · 0 · 1 = 1,
y2 = y1 + δt · f (t1 , y1 ) = 1 + 1 · 1 · 1 = 2,
y3 = y2 + δt · f (t2 , y2 ) = 2 + 1 · 2 · 2 = 6,
y4 = y3 + δt · f (t3 , y3 ) = 6 + 1 · 3 · 6 = 24.
t2
Die Werte der analytischen Lösung y(t) = e 2 betragen dagegen
1
y(t1 ) = e 2 = 1.6487 . . . ,
4
y(t2 ) = e 2 = 7.3890 . . . ,
9
y(t3 ) = e 2 = 90.017 . . . ,
16
y(t4 ) = e 2 = 2980.9 . . . .

ii) Verfahren von Heun:

δt 1 3
y1 = y0 + · (t0 · y0 + f (t1 , y0 + δt · t0 · y0 )) = 1 + · (1 · 1) = ,
2 2 2
δt 3 1 3 3 3
y2 = y1 + · (t1 · y1 + f (t2 , y1 + δt · t1 · y1 )) = + · ( + 2 · ( + ))
2 2 2 2 2 2
21
= = 5.25,
4
δt 21 1 21 21 42
y3 = y2 + · (t2 · y2 + f (t3 , y2 + δt · t2 · y2 )) = + · ( + 3 · ( + ))
2 4 2 2 4 4
21 1 189 42 273
= + ·( + ) = = 34.125,
4 2 4 4 8
δt
y4 = y3 + · (t3 · y3 + f (t4 , y3 + δt · t3 · y3 ))
2
273 1 273 273 273
= + · (3 · +4·( +3· ))
8 2 8 8 8
273 1 273 21
= + · (3 · + 2 · 273) = · 273 = 358, 3 . . . .
8 2 8 16

Im Vergleich zu den Werten der analytischen Lösung erkennt man, dass das Ver-
fahren von Heun für diese (relativ großen) Zeitschritte durchaus noch einen nicht
t2
unerheblichen Fehler im Vergleich zur analytischen Lösung y(t) = e 2 macht, aber
schon besser ist als das explizite Euler-Verfahren.
iii) Klassisches Runge-Kutta-Verfahren:
Um einen globalen Runge-Kutta-Schritt zu machen, sind jeweils vier Subschritte
T1 , . . . , T4 auszuführen:
k = 0:

T1 = f (t0 , y0 ) = t0 · y0 = 0,
δt δt 1 1
T2 = f (t0 + , y0 + · T1 ) = ·1= ,
2 2 2 2
δt δt 1 5 5
T3 = f (t0 + , y0 + · T2 ) = · = ,
2 2 2 4 8
13 13
T4 = f (t1 , y0 + δt · T3 ) = 1 · = .
8 8
Damit ergibt sich für den ersten Gesamtschritt:
δt 1 5 13
y1 = y0 + (T1 + 2T2 + 2T3 + T4 ) = 1 + · (0 + 1 + + )
6 6 4 8
1 31 79
= 1+ ·( )= = 1, 645 . . . .
6 8 48
k = 1:

79
T1 = f (t1 , y1 ) = t1 · y1 = ,
48
δt δt 3 79 79 9 79 711 237
T2 = f (t1 + , y1 + · T1 ) = ·( + )= · = = ,
2 2 2 48 2 · 48 4 48 192 64
δt δt 3 79 4 1 711
T3 = f (t1 + , y1 + · T2 ) = ·( · + · )
2 2 2 48 4 2 192
3 2 · 4 · 79 + 711 3 · 1343
= ·( )= ,
2 2 · 192 4 · 192
79 3 · 1343 16 · 79 + 3 · 1343 5293
T4 = f (t2 , y1 + δt · T3 ) = 2 · ( + ) = 2·( )= .
48 4 · 192 4 · 192 2 · 192
Damit ergibt sich für den zweiten Gesamtschritt:
δt 79 1 79 711 3 1343 5293
y2 = y1 + (T1 + 2T2 + 2T3 + T4 ) = + ·( + + · + )
6 48 6 48 2 · 48 2 192 2 · 192
79 1 8 · 79 + 4 · 711 + 3 · 1343 + 5293
= + ·( )
48 6 2 · 192
79 12798 16590
= + = = 7, 200 . . . .
48 2304 48 · 48

Weitere Gesamtschritte ersparen wir uns in Anbetracht der relativ unschönen Brüche
und überlassen diesem dem Computer (z.B. kurzes Matlab-Programm schreiben).
Wir erhalten dann als Ergebnis

y3 = 77.70 . . . ,

y4 = 1856.8 . . .

Das Klassische Runge-Kutta-Verfahren approximiert die analytischen Werte also


noch etwas besser als das explizite Euler-Verfahren und das Verfahren von Heun.

Je größer die Ordnung des Verfahrens (Euler: 1, Heun: 2, kl. Runge-Kutta: 4), desto
besser die numerischen Ergebnisse.
3) Zusatzaufgabe: Euler-Verfahren und Zinsberechnung
Die Verzinsung eines Guthabens, das am Anfang den Wert y0 habe und pro Jahr p% Zinsen
erhält, kann man als Anwendung des expliziten Euler-Verfahrens auf ein Anfangswertproblem
ẏ = f (y) interpretieren.
a) Wiederholung: Wie sieht die Berechnungsvorschrift des expliziten Euler-Verfahrens mit
Schrittweite δt für das AWP ẏ = f (y) aus?
b) Die Diga-Bank schüttet Zinsen immer zum Jahresende aus. Geben Sie die rechte Seite
f (y) an, so dass das Eulerverfahren mit δt=1 (Jahr) gerade diese Verzinsung beschreibt.
c) Berechnen Sie die analytische Lösung des AWPs!
d) Nun macht die Spaßkasse das Angebot, Zinsausschüttungen vierteljährlich statt nur am En-
de des Jahres durchzuführen. Geben Sie die Euler-Formel für diese neue Schrittweite an und
berechnen Sie daraus eine explizite Vorschrift, um direkt den Wert des Gesamtguthabens
nach einem vollen Jahr (yend ) zu ermitteln.
e) Vergleichen Sie für den konkreten Fall eines Startguthabens von y0 =100000 Euro und
einer Verzinsung von p = 2 Prozent p.a. die verschiedenen Guthaben yend nach einem
Jahr bei der Diga-Bank, der Spaßkasse und einer virtuellen Bank mit Verzinsung nach der
analytischen Lösung des AWPs! Was stellen Sie fest?

Lösung:
a) Explizites Euler-Verfahren für das angegebene AWP:

yk+1 = yk + δt · f (yk ) .

b) Ausgehend vom Startkapital y0 soll mit δt = 1 das Startkapital plus Zinsen bei y1
herauskommen. Die Zinsen für den Zeitraum eines Jahres sind δt · p/100 · y0 . Damit ergibt
sich insgesamt:
y1 = y0 + δt · p/100 · y0 ,

und die Funktion f der rechten Seite ist f (y) = p/100 · y.


pt
c) Die analytische Lösung des AWPs lautet y(t) = y0 e 100 . Das erkennt man entweder schon
direkt aus dem AWP oder rechnet es beispielsweise mit der Separation der Variablen nach
(ẏ(t) = p/100 · y(t) = F (t) · G(y) mit F (t) = p/100 und G(y) = y, sowie t0 =0):

dy
= F (t) · G(y)
dt
dy
= F (t)dt
G(y)
Z y
1 Z t
dη = F (τ )dτ
y0 G(η) t0
Z y
1 Z t
p
dη = dτ
y0 η t0 100
p
ln(y) − ln(y0 ) = ·t
100
pt
y(t) = y0 · e 100 , t ∈ [0; b].
d) Wir verwenden nun 4 Schritte des Euler-Verfahrens zur kleineren Schrittweite δt = 1/4
(Jahr). Die Berechnungsvorschrift für yk+1 lautet dann:
!
p δt p
yk+1 = yk + δt · · yk = 1+ · yk .
100 100

Wenn wir diese Definition rekursiv einsetzen, so erhalten wir die explizite Formel zur
direkten Berechnung von yk+1 aus y0 :
! !2 !k+1
δt p δt p δt p
yk+1 = 1+ · yk = 1+ · yk−1 = . . . = 1+ · y0 .
100 100 100

e) Für die konkreten Werte y0 =100000 Euro und p = 2 erhalten wir folgende Gesamtgutha-
benswerte yend nach einem Jahr (b = 1):

Diga-Bank : yend = 105 + 1 · 2/100 · 105 = 102000, 00 ,


1
!4
·2
Spaßkasse : yend = y4 = 1+ 4
· 105 = 102015, 05 ,
100
2
Anal. Lsg. : yend = 105 · e 100 = 102020, 13 .

Man erkennt, dass mit ca. 15 Euro (0,015%) ein nicht unerheblicher Unterschied im Endka-
pital zwischen Diga und Spaßkasse vorliegt. Die Differenz der Spaßkasse zur analytischen
Lösung beträgt nur etwa 5 Euro.

Das könnte Ihnen auch gefallen