HUMBOLDT–UNIVERSIT¨AT ZU BERLIN Musterlösung

Transcription

HUMBOLDT–UNIVERSIT¨AT ZU BERLIN Musterlösung
HUMBOLDT–UNIVERSITÄT ZU BERLIN
Mathematisch-Naturwissenschaftliche Fakultät II
Institut für Mathematik
Prof. PhD. Andreas Griewank
Jan Riehme
Humboldt-Universität zu Berlin, Institut für Mathematik, Unter den Linden 6, D-10099 Berlin
Musterlösung Übungsserie 2
Mathematik für Informatiker III
Aufgabe 1: Löse folgende Anfangswertaufgaben:
(i) y0 = (y3 + 1)sin(x)/y2 ,
y(0) = 1
Lösung: Die ODE
y 0 = (y 3 + 1)sin(x)/y 2 =
y3 + 1
sin(x)
y2
| {z } | {z }
g(y)
f (x)
ist eine separable Differentialgleichung erster Ordnung.
Verwende Lösungsmethode auf Folie nach Satz C.12:
Z x
Z x
x
F (x) :=
f (t) dt =
sin(t) dt = −cos(t) = 1 − cos(x)
x0
0
0
und
Z
y
G(y) :=
y0
1
dt =
g(t)
Z
0
x
y
1
1
t2
3
dt
=
ln
|t
+
1|
ln |y 3 + 1| − ln 2 =: z(y)
=
3
t +1
3
3
1
Nun Umkehrfunktion G−1 (z) = y(z) bilden:
ln |y 3 + 1| = 3z + ln 2
=⇒
|y 3 + 1| = e3z+ln 2 = e3z eln 2 = 2e3z
Fallunterscheidung wegen Betragsfunktion:
Fall 1: y 3 ≥ −1 =⇒ |y 3 + 1| = y 3 + 1 ≥ 0
√
=⇒ y 3 = 2e3z − 1 =⇒ y = 3 2e3z − 1
Einsetzen von F (x) als Argument von G−1 (z) liefert Lösung der ODE
y1 (x) =
p
3
2e3−3 cos(x) − 1
Prüfung der Anfangsbedingung
p
p
√
√
3
3
3
y1 (0) = 2e3−3 cos(0) − 1 = 2e3−3 − 1 = 3 2 − 1 = 1 = 1 = y0
Damit ist y1 (x) eine Lösung des gegebenen Anfangswertproblems.
y 3 < −1 =⇒ |y 3 + 1| = −(y 3 + 1) > 0
√
√
=⇒ y 3 = −2e3z − 1 =⇒ y = 3 −2e3z − 1 = − 3 2e3z + 1
Einsetzen von F (x) als Argument von G−1 (z) liefert ( für y 3 < −1 )
p
3
y2 (x) = − 2e3−3 cos(x) + 1
Fall 2:
Prüfung der Anfangsbedingung
p
p
√
√
3
3
3
y2 (0) = − 2e3−3 cos(0) + 1 = − 2e3−3 + 1 = − 3 2 + 1 = − 3 6= 1 = y0
Damit ist y2 (x) keine Lösung des gegebenen Anfangswertproblems.
(ii) 2(1 + x) + 3tẋ = 0,
x(1) = 0 oder x(1) = −2
Lösung: Hier gibt es (mindestens) zwei Lösungsvarianten:
Variante A: Lösung als Separable ODE
ẋ =
−1
(1 + x)
3t | {z }
|{z}
f (t)
g(x)
Verwende Lösungsmethode auf Folie nach Satz C.12:
Z
Z t
Z t
t
2
−2
2 t1
2
F (t) :=
f (y) dy =
dy = −
dy = − ln |y| = − ln |t|
3y
3
y
3
3
1
1
t0
1
und, wenn wir t >= 1 = t0 vorausetzen (dieser Fall reicht uns hier),
2
F (t) = − ln t,
3
sowie (Achtung: Hier wird der Anfangswert x0 nicht sofort eingesetzt, da in dieser Musterlösung
alle Anfangswerte diskutiert werden sollen. Wenn nur ein nur ein Anfangswert vorliegt, dann sollte
natürlich dieser gleich eingesetzt werden.)
Z x
Z x
x
1
1
dy =
dy = ln |y + 1| = ln |x + 1| − ln |x0 + 1| =: z(x)
G(x) :=
g(y)
1
+
y
x0
x0
x0
Nun Umkehrfunktion G−1 (z) = x = x(z) bilden:
ln |x + 1| = z + ln |x0 + 1|
ez+ln |x0 +1| = ez · |x0 + 1| = |x + 1|
=⇒
Fallunterscheidung wegen Betragsfunktion für x:
Fall 1:
x ≥ −1 =⇒ |x + 1| = x + 1 ≥ 0 =⇒ x = x(z) = ez |x0 + 1| − 1
Einsetzen von F (t) = − 23 ln t als Argument von G−1 (z) liefert ( x ≥ −1 )
2
x = e− 3 ln t |x0 + 1| − 1 = eln t
Fall 2:
− 23
|x0 + 1| − 1 =
|x0 + 1|
√
− 1 = x1 (t)
3 2
t
x ≤ −1 =⇒ |x + 1| = −(x + 1) ≥ 0 =⇒ x = x(z) = −ez |x0 + 1| − 1
Einsetzen von F (t) = − 23 ln t als Argument von G−1 (z) liefert ( x < −1 )
2
−e− 3 ln t |x0 + 1| − 1 = − eln t
− 23
|x0 + 1|
|x0 + 1| − 1 = − √
− 1 = x2 (t)
3 2
t
Einsetzen der verschiedenen Anfangsbedingungen (nur x0 wird jetzt verwendet, t0 wurde schon bei
F (t) benutzt):
x0 = 0
x1 (t) =
|x0 +1|
√
3 2
t
−1=
|0+1|
√
3 2
t
−1=
1
√
3 2 − 1
t
−2/3
= t−2/3 − 1 = x1 (t)
Prüfe Anfangsbedingung: x1 (1) = 1
− 1 = 1 − 1 = 0 = x0
Also ist x1 (1) = t−2/3 − 1 eine Lösung des Anfangswertproblems mit x(1) = 0.
−2/3
1
0 +1|
√
x2 (t) = − |x√
− 1 = − |0+1|
− 1 = x2 (t)
3 2
3 2 − 1 = − √
3 2 − 1 = −t
t
t
t
Prüfe Anfangsbedingung: x2 (1) = −1−2/3 − 1 = −1 − 1 = −2 6= 0 = x0
Also ist x2 (1) = −t−2/3 − 1 keine Lösung des Anfangswertproblems mit x(1) = 0.
x0 = −2
x1 (t) =
|x0 +1|
√
3 2
t
−1=
|−2+1|
√
3 2
t
−1=
1
√
3 2
t
2/3
− 1 = t−2/3 − 1 = x1 (t)
Prüfe Anfangsbedingung: x1 (1) = 1 − 1 = 1 − 1 = 0 6= −2 = x0
Also ist x1 (1) = t−2/3 − 1 keine Lösung des Anfangswertproblems mit x(1) = −2.
−2/3
1
0 +1|
√
x2 (t) = − |x√
− 1 = − |−2+1|
−1=−√
− 1 = x2 (t)
3 2
3 2
3 2 − 1 = −t
t
t
t
Prüfe Anfangsbedingung: x2 (1) = −1−2/3 − 1 = −1 − 1 = −2 = x0
Also ist x2 (1) = −t−2/3 − 1 eine Lösung des Anfangswertproblems mit x(1) = −2.
x0 = −1
(das ist das x0 der ursprünglichen Aufgabe)
x1 (t) =
|x0 +1|
√
−1
3 2
t
|x0 +1|
− √
−
3 2
t
|−1+1|
√
− 1 = 0 − 1 = −1 = x∞ = x1 (t)
3 2
t
|−1+1|
=− √
− 1 = −0 − 1 = −1 = x∞ = x2 (t)
3 2
t
=
x2 (t) =
1
Der Anfangswert x0 = −1 führt auf die Konstante −1 als Lösung, das ist aber genau der vom
Anfangswert unabhängige asymptotische Grenzwert x∞ der Lösung der ODE!
Dieses Verhalten kann wie folgt interpretiert werden: Der zugrunde Prozess (z.Bsp. eine chemische Reaktion) strebt immer einem Gleichgewichtszustand entgegen, den es u.U. nur im
Grenzwert für unendlich lange Prozesszeiten erreicht. Startet man den Prozess allerdings
schon im Gleichgewicht ( also x?− = X∞ ), dann bleibt das Gleichgewicht erhalten. (Zumindest in so einfachen Modellen, bei denen keine anderen äußeren Einflüsse eine Rolle spielen).
x(t)
x(t) = t−2/3 − 1
0
1
2
3
4
5
6
7
8
9
10
t
x∞ = −1
x(t) = −t−2/3 − 1
−2
−3
Variante B: Lösung als lineare ODE erster Ordnung
x(1) = 0 oder x(1) = −2
2(1 + x) + 3tẋ = 0,
Umschreiben:
ẋ +
2
2
x=−
3t
3t
|{z}
|{z}
a(t)
f (t)
Schritt 1 : Finde Lösung xh (t) der homogenen ODE (Satz D.15)
2
Ansatz
x=0
=⇒
x(t) = ce−A(t)
3t
mit A(t) eine Stammfunktion von a(t)
Z
Z
2
2
1
A(t) = a(t) dt =
dt = ln |t|
3
t
3
ẋ +
Also
2
xh (t) = c e−A(t) = c e− 3 ln |t| = c
eln |t|
− 23
2
c
= c t− 3 = √
= xh (t)
3 2
t
Schritt 2: Finde spezielle Lösung der inhomogenen ODE mit dem Ansatz aus Satz D.16:
Z
t
x(t) =
f (z)eA(z) dz · e−A(t) + xh (t)
Z
t0
Z
t
=
f (z) eA(z) dz + c e−A(t)
t0
t
2
2 2 ln |z|
3
=
− e
dz + c t− 3
3z
t0
Z
2
2 t −1
3
= −
z dz + c t− 3
3 t0
i
2
2
62 63h 2
= − ·
t 3 − t03 + c t− 3
63 62
= (c + 1)t
− 23
2
3
−t ·t
− 32
t
2
1 2
3
z dz + c t− 3
z
t
"0 #
!
t
2
2 3 2 = −
z3
+ c t− 3
3 2 t0
2
2
= −t 3 + 1 + c t− 3
2
= −
3
Z
t0 =1
=
2
(c + 1)t− 3 − 1 = x(t)
Einsetzen der verschiedenen Anfangsbedingungen, um die verbliebene Konstante c zu bestimmen
(nur x0 wird jetzt verwendet, t0 wurde schon bei x(t) benutzt):
x(1) = 0
2
x(1) = 0 = (c + 1)1− 3 − 1 = c + 1 − 1 = c = 0
Also ist
=⇒
c=0
2
1
x(t) = t− 3 − 1 = √
−1
3 2
t
eine Lösung der ODE mit der Anfangsbedingung x(1) = 0.
Prüfe Anfangsbedingung: x(1) = 1−2/3 − 1 = 1 − 1 = 0
x(1) = −2
x(1) = −2 = c
Also ist
=⇒
c = −2
2
1
x(t) = −t− 3 − 1 = − √
−1
3 2
t
eine Lösung der ODE mit der Anfangsbedingung x(1) = −2.
Prüfe Anfangsbedingung: x(1) = −1−2/3 − 1 = −1 − 1 = −2
x(1) = −1
(das ist das x0 der ursprünglichen Aufgabe)
x(1) = −1 = c =⇒ c = −1
Also ist
2
2
x(t) = (−1 + 1)t− 3 − 1 = 0 · t− 3 − 1 = −1
eine Lösung der ODE mit der Anfangsbedingung x(1) = −1.
Der Anfangswert x0 = −1 führt auf die Konstante −1 als Lösung, das ist aber genau der vom
Anfangswert unabhängige asymptotische Grenzwert x∞ der Lösung der ODE!
(iii) y00 + y0 + y = 0,
y(0) = 1 = y0 (0)
Lösung:
Das ist eine lineare ODE zweiter Ordnung mit konstanten Koeffizienten (siehe Definition D.17):
Die Koeffizienten sind a1 = a2 = 1.
Schritt 1: Suche Lösung der homogenen ODE, dazu stellen wir das charakteristische Polynom auf
und betrachten dessen Wurzeln:
√
0 = λ2 + λ + 1
r
√
1
3
1
1
λ1,2 = − ±
−1=− ±
i
2
4
2
2
Somit ist λ = − 12 + 23 i (und ihre konjugiert komplexe Zahl λ̄ = − 21 −
komplexe Nullstelle des charakteristischen Polynoms. Also sind
√ √ 1
1
e− 2 x cos 23 x
und
e− 2 x sin 23 x
√
3
2
i ) eine einfache
Lösungen der homogenen linearen ODE ( siehe Folie 60 nach Definition D.20 ).
Schritt 2: Konstruktion der Lösung der Ausgangs - ODE (nicht homogen)
Nach Satz D.19 spannen die n = 2 Lösungen der homogenen linearen ODE n-ter Ordnung einen
Vektorraum der Dimension n = 2 auf. Die Lösungen der homogenen ODE bilden also eine Basis
des Vektorraumes der inhomogenen Lösungen.
Eine Lösung der inhomogenen ODE gewinnen wir aus dem Ansatz ( Linearkombination der Lösungen der homogenen ODE mit den Koeffizienten c1 und c2 )
√ √ 1
1
y(x) = c1 · e− 2 x cos 23 x + c2 · e− 2 x sin 23 x
h
√ √ i
1
= e− 2 x c1 · cos 23 x + c2 · sin 23 x
und bestimmen mit Hilfe der beiden Anfangsbedingungen y(0) = 1 = y 0 (0) die Konstanten c1
und c2 :
h
√
√
i
1
y(0) = 1 = e− 2 ·0 c1 · cos 23 · 0 + c2 · sin 23 · 0
= 1 [c1 · 1 + c2 · 0] = c1 = 1
Zur Bestimmung des letzten Koeffizienten verwenden
wiry 0 (0)= 1, müssen
√ also
ierst einmal die
h
√
3
3
− 12 x
erste Ableitung des Lösungansatzes y(x) = e
c1 · cos 2 x + c2 · sin 2 x bestimmen:
1 h
√ √ i0
y 0 (x) = e− 2 x c1 · cos 23 x + c2 · sin 23 x
√ √ i
1 1 h
= − e− 2 x c1 · cos 23 x + c2 · sin 23 x
2
h
√ √
√ 1
+ e− 2 x −c1 · sin 23 x · 23 + c2 · cos 23 x ·
√
3
2
i
Mit y 0 (0) = 1 und c1 = 1 erhalten wir
h
1
y 0 (0) = 1 = − e0 [c1 · cos 0 + c2 · sin 0] + e0 −c1 ·
2
h
√ i
1
= − c1 + c2 · 23
2
√
1 !
= c2 · 23 −
= 1
c1 =1
2
√
3
2
√
· sin 0 + c2 ·
3
2
i
· cos 0
und somit
√
3 2
· √ = 3.
2
3
Insgesamt ergibt sich damit als Lösung der inhomogenen ODE 2.ter Ordnung
c2 =
y(x) = e−x/2
h√
3 sin
√
3
2
√ i
x + cos 23 x
Aufgabe 2: Numerische Lösung von Anfangswertproblemen
Wende den expliziten Euler und die Mittelpunktsregel auf das Problem
ẏ = y + t,
y(0) = 1, T = 1
an. Verwende dabei die Schrittweiten h = 1/nk mit nk = 2k für k = 1, 2, 3, . . . , 9.
Berechne die exakte Lösung y(1) und plotte für beide Methoden − log |ynk − y(1)| über k
in einem Diagramm. Hierbei ist ynk der von der Methode in n = 2k Schritten erhaltene
Wert.
Lösung:
Bestimme exakte Lösung der linearen ODE 1.Ordnung (Def. D.14):
ẏ − y = ẏ + ( −1 )y = |{z}
t
|{z}
a(t)
f (t)
• Löse homogene ODE ẏ − y = 0 (Satz D.15):
– Bestimme A(t) als Stammfunktion von a(t) = −1 =⇒A(t) = −t
– Lösung der homogenen ODE ist damit yh (t) = c · e−A(t) = c · et
• Lösung der inhomogenen ODE (Satz D.16)
Z
t
y(t) =
t0
Z t
f (z)eA(z) dz + c · e−A(t) =
ze−z dz + c · et
0
R
R
Partielle Integration [ uv 0 dx = uv − u0 vdx] mit u = z, v 0 = e−z , v = −e−z ergibt:
Z
t
−z
ze
dz = −z e
0
und damit
t Z t
t
(t + 1)
−z
−z
−z −t
−e dz = −z e − e
−
= (−t − 1) e − (−1) = 1 − et
0
0
0
−z t+1
y(t) = 1 − t + c et = et − (t + 1) + c et = (1 + t)et − t − 1
e
• Anfangswert y(0) = 1 benutzen, um Konstatne c zu bestimmen
y(0) = 1 = 1 − e−0 (0 + 1) e0 = 1 − 1 + c = 1
=⇒
c=1
Insgesamt
y(t) = 2et − t − 1,
also
y(1) = 3.4365636569180904707
Ergebnisse von Eulerverfahren und Mittelpunkt-Regel im Vergleich mit exakter Lösung:
k
1
2
3
4
5
6
7
8
9
y2k ,Eul
2.500000
2.882812
3.131569
3.275857
3.353980
3.394690
3.415478
3.425983
3.431264
|y2k ,Eul − y(1)|
0.936564
0.553752
0.304995
0.160707
0.082584
0.041874
0.021086
0.010581
0.0053
y2k ,M id
3.281250
3.389711
3.423682
3.433187
3.435699
3.436345
3.436509
3.436550
3.436560
|y2k ,M id − y(1)|
0.155314
0.046853
0.012882
0.003377
0.000865
0.000219
5.5e-05
1.4e-05
4e-06
Tabelle − log |ynk − y(1)|:
k
1
2
3
4
5
6
7
8
9
− log |ynk − y(1)|
Euler Midpoint
0.065538
1.862309
0.591040
3.060756
1.187461
4.351988
1.828175
5.690882
2.493947
7.053580
3.173096
8.428112
3.859164
9.808536
4.548751 11.191898
5.240113 12.576727
14
Euler
Midpoint
12
10
8
6
4
2
0
-2
0
2
4
6
8
10
Abbildung 1: − log |ynk − y(1)| für Euler und Mittelpunkt
Mögliches C - Programm:
1 #include <math . h>
2
3 #define MAXK 1 0
12
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// r e c h t e S e i t e d e r ODE
double f ( double t , double y ) {
return y + t ;
}
double T = 1 . 0 ;
double T0 = 0 . 0 ;
double Y0 = 1 . 0 ;
int main ( void ) {
long int k , n , i ;
double h , tk , yk , yk0 , f k ;
double ykm ;
n=1;
f or ( k = 1 ; k < MAXK; k ++ ) {
n ∗= 2;
h = (T−T0 ) / ( double ) n ;
h=%l f \n#\n” , k , n , h ) ;
p r i n t f ( ”#\n# k=%d n=%d
tk = T0 ;
yk = ykm = Y0 ;
printf (” %l f
% l f % l f % l f \n” ,
tk , yk , ykm , 2 . 0 ∗ exp ( tk )−tk −1);
for ( i = 1 ; i < n + 1 ; i ++ ) {
// E u l e r
yk += h ∗ f ( tk , yk ) ;
// m i d p o i n t
f k = f ( tk , ykm ) ;
ykm += h ∗ f ( ( h ∗ ( ( double ) i − . 5 ) ) , ykm + h∗ f k / 2 . 0 ) ;
// time s t e p
tk = i ∗h ;
printf (” %l f
% l f % l f % l f \n” ,
tk , yk , ykm , 2 . 0 ∗ exp ( tk )−tk −1);
}
p r i n t f ( ”\n\n\n” ) ;
}
}
Aufgabe 3: Numerische Lösung von Systemen von ODEs
Vom einem Startpunkt nahe am Ursprung (z.B. (0.1, 0.1, 0.1)) wende die Mittelpunktsregel
auf das folgende System von drei gewöhnlichen Differentialgleichungen erster Ordnung
an:
dx
dt
dy
dt
dz
dt
= −10x + 10y
=
28x − y − xz
= −8/3z + xy.
Lösung für T = 1, k = 1, . . . , 35 mit ak = (xk , yk , zk )T mit xk , yk und zk jeweils berechnet mit
Schrittweite 2−k :
k
1
2
3
4
5
x
140.495916
305.485175
9481751.390046
3.990979
-8.085631
y
-43.980152
213.513767
35825683761.798683
0.828050
-8.340393
z
-31.397437
-225.221352
35446260109.048477
33.591529
26.680917
kak − ak−1 k
—3.6e+02
5.0e+10
5.0e+10
1.7e+01
k
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
x
-8.662505
-8.694260
-8.695994
-8.695807
-8.695686
-8.695647
-8.695636
-8.695633
-8.695633
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
-8.695632
y
-9.682238
-9.813123
-9.825330
-9.825945
-9.825797
-9.825722
-9.825699
-9.825692
-9.825691
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
-9.825690
z
26.273605
26.166494
26.152600
26.150978
26.150809
26.150796
26.150796
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
26.150797
kak − ak−1 k
1.5e+00
1.7e-01
1.9e-02
1.7e-03
2.6e-04
8.5e-05
2.6e-05
7.1e-06
1.8e-06
4.7e-07
1.2e-07
3.0e-08
7.5e-09
1.9e-09
4.7e-10
1.2e-10
3.3e-11
5.0e-12
7.7e-12
7.4e-12
4.9e-12
4.6e-12
2.4e-11
1.6e-11
3.3e-11
4.6e-11
1.6e-10
4.0e-10
5.0e-10
6.3e-09
In dieser Tabelle sieht man sehr schnell, das für k < 5 durch die zu grobe Diskretisierung mit hk = 21k
keine sinnvollen Werte berechnet werde (nicht einmal die Vorzeichen von x und y sind korrekt). Da ist
die Auswirkung des Diskretisierungsfehlers.
Erst ab k ≥ 5 ist die Diskretisierung so fein, das der Diskritiesierungsfehler nur noch ein untergeordnete
Rolle spielt und die berechneten Werte gegen den zum Zeitpunkt T = 1 gehörigen Punkt auf der
Lösungstrajektorie konvergieren. Dabei verringert sich mit jeder Halbierung der Schrittweite auch der
Abstand kak − ak−1 k der zugehörigen Lösung ak = (xk , yk , zk )T zur vorhergehenden Lösung ak−1 (
siehe Spalte 5 der obigen Tabelle ).
Ab k = 23 fängt der Abstand kak − ak−1 k wieder an zu wachsen. Der Grund dafür sind die nun immer
stärker werdenden Rundungsfehler bei der Berechnung von ak mit k ≥ 23.
Verifiziere zunächst über eine kurze Integrationsperiode T = 1 mit den gleichen Zeitschritten wie in Aufgabe 2, dass die numerische Integration tatsächlich mit der Ordnung
zwei erfolgt. Dazu berechne die annähernde Fehlerkonstante
4
3
kank − ank+1 k
h2nk
mit ank = (xnk , ynk , znk )T und untersuche, ob sie im Wesentlichen von k unabhängig ist.
Fehlerkonstante c̃ =
4 kank −ank+1 k
3
h2n
für k = 1, . . . , 35:
k
k
1
2
3
4
5
6
7
c̃
1931.022318
1075148583592.741089
4300594331743.996094
5687.697234
2070.285777
939.793479
405.799112
k
10
11
12
13
14
15
16
c̃
119.184565
144.195121
157.957615
165.062863
168.663292
170.473983
171.381771
k
23
24
25
26
27
28
29
c̃
722.843709
2784.797539
7423.270558
27566.738605
584342.038577
1557510.077861
12709087.405301
k
8
9
c̃
152.447179
89.219573
k
17
18
19
20
21
22
c̃
171.859347
172.113293
171.264984
172.066506
190.881547
117.834077
k
30
31
32
33
34
c̃
70009277.896700
1000007865.513323
9827056893.592941
49666443572.844818
2470013054559.398438
Interpretation:
Die Größe c = c(T ), die bei einem Integrator der Ordnung p als Vorfaktor des Diskretisierungsfehlers
hp in
kak − y(T )k = c(T )hpk + O(hp+1 ) ≈ c(T )hpk
auftritt, wird Fehlerkonstante genannt, da sie nicht von der gewählten Schrittweite hk abhängt (aber
natürlich von der Integrationsdauer T ).
Eine Näherung von c(T ) für die Mittelpunktsregel erhält man aus Beispiel D.25 des Skripts. Dort wird
aus der mit der Mittelpunktsregel und Schrittweite hk berechneten Lösung ak und der mit doppelter
Schrittweite hk−1 berechneten ak−1 die Näherung c̃(T ) hergeleitet:
c(T ) ≈
4
3
kak − ak+1 k
h2k
≡ c̃(T ) = c̃.
Für k = 1, . . . , 4 macht die Betrachtung c̃ keinen Sinn, da zur Berechnung Werte benutzt werden, die
mit der Lösung aufgrund der zu grossen Schrittweite nichts zu tun haben (siehe oben).
Für k = 5, . . . , 9 ist eine deutliche Reduktion von c̃ zu sehen, allerdings sind die Schwankungen immer
noch zu stark für eine Aussage über die Abhängigkeit der Fehlerkonstanten von der Schrittweite.
Trotzdem ist bereits hier bemerkenswert, das die c̃ als Näherung des Vorfaktors im Fehler c(T )h2k +
O(h2+1
k ) nicht mit kleiner werdender Schrittweite wächst, sondern kleiner wird.
Wird die Schrittweite weiter verkleinert (k = 10, . . . , 22), so kann man an den berechneten Werten
für c̃ sehen, dass die Fehlerkonstante tatsächlich von der Wahl der Schrittweite unabhängig ist: Die
entsprechenden Werte in der Tabelle 3 schwanken nur noch sehr wenig, auch wenn die Schrittweite
sehr stark verkleinert wird ( und zwar um den Faktor 222 /210 = 212 = 4096).
Sehr schön kann man hier wieder sehen, dass die Mittelpunktsregel ein Verfahren der Ordnung p = 2
k+1 k
trotz des quadratisch wachsenden Wertes von h1k nahezu konstant bleibt
ist: Das c̃ = 34 kak −a
h2k
impliziert sofort, das die Differenz kak − ak+1 k auch mit Ordnung 2 kleiner wird.
Bei weiterer Verkleinerung der Schrittweite (hier ab k = 23, . . . , 35 durchgeführt) nimmt der berechnete
Wert der Fehlerkonstanten wieder zu, was aber nicht als Abhängigkeit von der Schrittweite interpretiert
werden darf: Die weitere Verkleinerung der Schrittweite führt nun aufgrund immer stärker ins Gewicht
fallender Rundungsfehler zu wieder mit k wachsenden Veränderungen kak − ak+1 k der Lösung ak
(Spalte 5 der Tabelle 3), die noch durch den Faktor h12 weiter verstärkt werden.
k
Insgesamt hat man damit experimentell nachgewiesen, das die Fehlerkonstante c(T ) nicht von k (und
damit der Schrittweite hk ) abhängig ist.
Dann integriere über den längeren Zeitraum T = 20 (besser T = 25 oder T = 30) und
beobachte die Abhängigkeit der Lösung von der Schrittzahl und dem Anfangspunkt, der
immer noch nahe am Ursprung variiert werden kann. Stelle dabei sicher, das trotz nun
deutlich vergrössertem Zeitintervall die gleichen Zeitschritte hk = 1/2k verwendet werden!
Im folgenden wird jeweils die x-Komponente des Anfangswertes a0 = (x0 , y0 , z0 ) = (0.1, 0.1, 0.1) mit
einen ∆ gestört. ak = (xk (T ), yk (T ), zk (T ))T = (xk , yk , zk )T bezeichnet dabei die mit Schrittweite
hk = 1/2k berechnete numerische Lösung vom ungestörten Anfangswert a0 = (.1, .1, .1), während die
zum gestörten Anfangswert ã0 = (.1 + ∆, .1, .1) gehörige Lösung mit ãk = (x̃k , ỹk , z̃k )T bezeichnet
wird.
∆ = 10−4
In der folgenden Tabelle sind die Differenzen zwischen ak und ãk angeben:
k
1
2
3
T = 20
kak − ãk k
NaN
NaN
NaN
T = 25
kak − ãk k
NaN
NaN
NaN
T = 30
kak − ãk k
NaN
NaN
NaN
k
4
5
6
7
8
9
10
11
12
13
14
15
T = 20
kak − ãk k
20.501975
0.002802
0.012778
0.017659
0.009686
0.012112
0.014431
0.015420
0.015722
0.015804
0.015825
0.015830
T = 25
kak − ãk k
13.305980
0.008084
0.395098
2.864944
28.938541
11.627949
0.781808
1.312642
3.318790
9.672175
13.202092
14.267615
T = 30
kak − ãk k
7.298038
2.195777
3.518372
26.290506
19.557223
15.387764
12.846552
3.071959
13.308455
12.328687
16.299790
18.440682
Die Schrittweiten hk = 1/2k für k = 1, 2, 3 sind für die Integration über den langen Zeitraum von
T = 20 (und größere Integrationsintervalle) viel zu grob, der Diskretisierungsfehler führt während
der Berechnung zu im Gleitkommaraster nicht darstellbaren Zahlen. Im weiteren werden wir deshalb
immer mit k = 5 starten.
Für k > 3 beobachtet man, dass für T = 20 die Auswirkung kak − ãk k der Störung des Startwertes auf
die Lösung scheinbar beschränkt ist, während für größere Integrationsintervalle (T = 25 und T = 30)
kein Einpegeln der Differenz kak −ãk k zu sehen ist. Dies ist aber der Abhängigkeit der Fehlerkonstanten
c = c(T ) vom der Länge des Integrationsintervalls zuzuschreiben: Da sie mit wachsender Integrationsdauer wächst, vergrößert das auch den Gesamtfehler kak (T ) − a(T )k = c(T ) hp + O(hp+1 ) mit a(T )
als exakter Lösung zum Zeitpunkt T . Weiter unten betrachten wir noch die Werte der Lösungskomponenten in Abhängigkeit von T , dort sieht man das Konvergenz für grössere T kleinere Schrittweiten
erfordert und mit dem Einpegeln der Lösung sich auch der Anstand kak − ãk k zwischen ungestörter
und gestörter Lösung stabilisiert.
Die nächste Tabelle zeigt die Auswirkung der Störung ∆ = 10−4 auf die Lösung ak als Vielfaches der
Störung ∆ = 10−4 :
k
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
T = 20
kak − ãk k/∆
0.28
1.28
1.77
0.97
1.21
1.44
1.54
1.57
1.58
1.58
1.58
1.58
1.58
1.58
1.58
1.58
1.58
1.58
1.58
T = 25
kak − ãk k/∆
0.81
39.51
286.49
2893.85
1162.79
78.18
131.26
331.88
967.22
1320.21
1426.76
1454.58
1461.61
1463.37
1463.82
1463.93
1463.95
1463.96
1463.96
T = 30
kak − ãk k/∆
219.58
351.84
2629.05
1955.72
1538.78
1284.66
307.20
1330.85
1232.87
1629.98
1844.07
1441.36
1284.30
1240.63
1229.41
1226.59
1225.88
1225.70
1225.67
Man sieht leicht, das die Störung für große Integrationsintervalle eine sehr große Reaktion in der Lösung
ãk nach sich zieht. Hier zeigt sich das chaotische Verhalten des Lorenzsystems: Man kann von einer
Trajektorie für einen Anfangswert a0 nicht auf die Trajektorie zu einem leicht gestörten Anfangswert
ã0 schließen (zumindest für interessante, größere Zeiträume).
∆ = 10−6
T = 20
kak − ãk k/∆
0.28
1.28
1.76
0.97
1.21
1.44
1.54
1.57
1.58
1.58
1.59
k
5
6
7
8
9
10
11
12
13
14
15
T = 25
kak − ãk k/∆
0.81
33.46
357.23
2135.91
1410.67
93.55
112.16
411.42
1286.62
1757.55
1891.64
T = 30
kak − ãk k/∆
172.08
4537.51
9476.35
5990.69
14038.52
12841.71
8942.98
23801.39
19700.81
13364.06
10601.62
∆ = 10−8
T = 20
kak − ãk k/∆
0.28
1.28
1.76
0.97
1.21
1.44
1.54
1.57
1.58
1.59
1.59
k
5
6
7
8
9
10
11
12
13
14
15
T = 25
kak − ãk k/∆
0.81
33.41
358.13
2127.72
1412.73
93.69
111.99
412.27
1289.67
1763.87
1899.33
T = 30
kak − ãk k/∆
171.69
4485.52
10241.60
7029.37
13478.77
12266.99
9728.83
31742.48
19501.67
14269.47
9525.28
An den Tabellen für ∆ = 10−6 und ∆ = 10−8 kann man erkennen, dass die Reaktion nicht von der
Größe der Störung und der Schrittweite hk abhängt: Auch auf kleine Störungen in der Größenordnung
von 10−8 reagiert die Lösung bei T = 30 mit einem Faktor von ca 104 .
Grafische Darstellung der Auswirkung einer Störung von 10−4 in der ersten Komponente des Anfangswertes (0.1, 0.1, 0.1) auf die Lösung:
nicht gestoert
gestoert
Startpunkt bei t=21.5
Loesung nicht gestoert bei t=28
Loesung gestoert bei t=28
45
40
35
30
25
20
15
10
5
-20
-15
-10
-5
0
5
10
15
-10
-15
-20
20-25
-5
0
5
10
15
20
25
In der Grafik ist die Entwicklung der Lösungen für den ursprünglichen und den mit ∆ = 10−4 gestörten
Startwert zu sehen. Die Lösungstrakjektorien unterscheiden sich für t ∈ [0, 21.5] nur geringfügig (ungefähr in der Größenordnung der Störung ∆ = 10−4 ). Deshalb wurden sie auch nicht in obiger Grafik
dargestellt.
Das Kreuz in der Grafik stellt die beide Lösungen zum Zeitpunkt t = 21.5 dar, die Trajektorien stimmen
auch noch für einige Zeit überein (Schlaufe nach rechts oben). Mit fortschreitender Zeit separieren sich
beide allerdings deutlich, zum Zeitpunkt t = 28 (markiert durch die Quadrate) befinden sich die
Lösungen an völlig verschiedenen Positionen. (Im weiteren Verlauf nähern und entfernen sich auch
wieder.)
Erstelle eine graphische Darstellung der Lösung (3-dimensional!!) vom Startpunkt (0.1, 0.1, 0.1)
für ein k > 7.
Lösungstrajektorie für t = 0..30 von Anfangswert (0.1, 0.1, 0.1):
’a3-30-9.res’
50
45
40
35
30
25
20
15
10
5
0
30
20
-20
10
-15
-10
0
-5
0
5
-10
10
15
-20
20-30
Nun untersuchen wir noch kurz den Einfluss der Intergrationsdauer auf die Konvergenzeigenschaften.
Dazu betrachten wir die Werte von xk für k = 5, . . . , 23 mit ∆ = 10−4 :
k
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
T = 20
xk
x̃k
-3.494566
-3.494338
-11.270226 -11.266371
1.880002
1.878429
-1.866830
-1.865680
-2.039448
-2.039303
-2.071395
-2.072062
-2.065532
-2.066553
-2.062175
-2.063306
-2.061164
-2.062325
-2.060897
-2.062066
-2.060829
-2.062000
-2.060812
-2.061983
-2.060807
-2.061979
-2.060806
-2.061978
-2.060806
-2.061978
-2.060806
-2.061978
-2.060806
-2.061978
-2.060806
-2.061978
-2.060806
-2.061978
T = 25
xk
x̃k
1.952341
1.947815
10.996204
10.798048
-12.676321 -12.640897
-16.961988
-7.470797
8.830243
13.074962
12.844207
12.428216
12.544303
12.712908
15.836561
14.950599
14.834763
16.322094
12.315842
15.856262
11.408694
15.607651
11.161890
15.534822
11.098822
15.515879
11.082958
15.511093
11.078985
15.509893
11.077991
15.509593
11.077742
15.509517
11.077680
15.509499
11.077665
15.509496
T = 30
xk
x̃k
6.053674
7.104504
-6.480503 -5.254567
4.371818 -9.015788
12.283833 10.588341
-1.352231
6.396224
-1.121606
5.339958
-4.388492 -2.978470
-2.353931
0.515525
-4.621451 -9.523835
3.085576 -5.045878
-8.224703
1.156648
-8.444340 -1.205992
-8.158642 -1.722782
-8.057922 -1.844591
-8.030658 -1.874562
-8.023705 -1.882003
-8.021958 -1.883893
-8.021521 -1.884355
-8.021412 -1.884416
k
T = 20
xk x̃k
T = 25
xk x̃k
T = 30
xk x̃k
Weiter oben haben wir für T = 1 und k > 5 beobachtet, dass die berechnete Lösung ak und insbesondere
deren erste Komponente xk gegen einen Grenzwert konvergieren.
Für T = 20 sehen wir hier nun, das xk sich für k > 9 stabilisiert und mit fortlaufendem k Konvergenz
zeigt (die Komponenten yk und zk zeigen ähnliches Verhalten), d.h. die Zahl der sich für wachsendes
k nicht mehr verändernden Dezimalstellen steigt (für gestörte und ungestörte Anfangswerte gleichermaßen).
Im Falle von T = 25 hat sich bei k = 15 nur eine Dezimalstelle eingepegelt, die Rechnung mit kleineren
Schrittweiten zeigt fortschreitenden Stabilisierung der numerischen Lösung.
Bei T = 30 ist bei einer Schrittweite hk = 1/215 = 1/32768 = .000030517578125 noch nicht einmal das
Vorzeichen der Lösung erkennbar!! Bei k = 23 sind nur die ersten 4 Dezimalstellen fixiert.
Mögliches C-Programm:
1 #include <math . h>
2
3 #define MINK 1
4 #define MAXK 2 0
5
6
7 typedef struct { double x , y , z ; } v a l ;
8
9 // r e c h t e S e i t e d e r ODE
10 double dxdt ( double x , double y , double z ) {
11
return −10∗x + 10∗ y ;
12 }
13 double dydt ( double x , double y , double z ) {
14
return 28∗ x −
y − x∗ z ;
15 }
16 double dzdt ( double x , double y , double z ) {
17
return −8.0∗ z / 3 . 0 + x∗y ;
18 }
19
20
21 double norm2 ( v a l a1 , v a l a0 ) {
22
double s ;
23
return s q r t ( ( a1 . x−a0 . x ) ∗ ( a1 . x−a0 . x )
24
+ ( a1 . y−a0 . y ) ∗ ( a1 . y−a0 . y )
25
+ ( a1 . z−a0 . z ) ∗ ( a1 . z−a0 . z ) ) ;
26 }
27
28 double e r r c ( v a l a1 , v a l a0 , int k ) {
29
return 4 ∗ norm2 ( a1 , a0 ) ∗ pow ( 2 , 2 ∗ k ) / 3 ;
30 }
31
32
33
34 void k l o o p m i d p o i n t ( int kmin , int kmax ,
35
double T , double T0 ,
36
double X0 , double Y0 , double Z0 ,
37
v a l ∗ VT, int p r i n t )
38 {
39
long long int k , n , i , N;
40
double h , tk , xk , yk , zk , dxk , dyk , dzk ;
41
42
if ( print )
43
p r i n t f ( ”## T % l f
X0 % l f Y0 % l f
Z0 % l f
44
T , X0 , Y0 , Z0 , kmax ) ;
45
kmx %d\n” ,
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
n=1;
n =
1 < < (kmin −1);
f or ( k = kmin ; k <= kmax ; k ++ ) {
n ∗= 2;
N = ( long ) c e i l ( f a b s (T−T0 ) ∗ ( double ) n ) ;
h = (T−T0 ) / ( double ) N;
i f ( p r i n t ) p r i n t f ( ”#\n” ) ;
h=%l f \n” , k , n , h ) ;
p r i n t f ( ”# k=%d n=%d
i f ( p r i n t ) p r i n t f ( ”#\n” ) ;
tk = T0 ;
xk = X0 ;
yk = Y0 ;
if ( print )
zk = Z0 ;
printf (” %l f %l f
% l f % l f \n” , xk , yk , zk , tk ) ;
for ( i = 1 ; i < N+ 1 ; i ++ ) {
// m i d p o i n t
dxk = xk + h∗ dxdt ( xk , yk , zk ) / 2 . 0 ;
dyk = yk + h∗ dydt ( xk , yk , zk ) / 2 . 0 ;
dzk = zk + h∗ dzdt ( xk , yk , zk ) / 2 . 0 ;
xk
yk
zk
+= h ∗ dxdt ( dxk , dyk , dzk ) ;
+= h ∗ dydt ( dxk , dyk , dzk ) ;
+= h ∗ dzdt ( dxk , dyk , dzk ) ;
// time s t e p
tk = i ∗h ;
i f ( p r i n t ) p r i n t f ( ”%l f
%lf
%lf
% l f \n” , xk , yk , zk , tk ) ;
}
VT[ k ] . x = xk ; VT[ k ] . y = yk ; VT[ k ] . z = zk ;
i f ( p r i n t ) p r i n t f ( ” \n\n” ) ;
else {
p r i n t f ( ”%l f % l f % l f % l f ” , xk , yk , zk , tk ) ;
i f ( k > kmin ) p r i n t f ( ” %7.1 e \n” , norm2 (VT[ k ] ,VT[ k − 1 ] ) ) ;
else
p r i n t f ( ”−−−−\n” ) ;
}
}
}
int main ( void ) {
double T = 1 . 0 ;
double T0 = 0 . 0 ;
double X0 = 0 . 1 ;
double Y0 = 0 . 1 ;
double Z0 = 0 . 1 ;
int
i , print = 0;
val
YT[MAXK+ 1 ] ;
X0 % l f Y0 % l f
p r i n t f ( ”## T % l f
”Z0 % l f
kmx %d\n” ,
T , X0 , Y0 , Z0 , MAXK ) ;
”
107
108
109
110
111
112
113
k l o o p m i d p o i n t ( MINK, MAXK, T , T0 , X0 , Y0 , Z0 , YT, p r i n t ) ;
p r i n t f ( ”\n\n” ) ;
f or ( i=MINK ; i < MAXK; i ++ )
% l f \n” , i ,
p r i n t f ( ” %4d
e r r c (YT[ i ] ,YT[ i +1] , i ) ) ;
}
phone: 030/2093-5820
fax: 030/2093-5859
e-mail: [email protected]
http://www.mathematik.hu-berlin.de/∼gaggle/MATHINF
[email protected]