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: griewank@math.hu-berlin.de http://www.mathematik.hu-berlin.de/∼gaggle/MATHINF riehme@math.hu-berlin.de