Wykład pokazuj acy, że wybór stałego nie zawsze jest dobrym pomysłem. Jak napisać program, który będzie sam sobie dobierał krok czasowy na podstawie narzuconej przez nas tolerancji dokładności
orbita komety Halleya masa Słońca M = 1.989 1 3 kg; Słońce w poczatku układu odniesienia, nieruchome; G = 6.6741 1 11 m 3 /kg/s 2, jednostka astronomiczna 149 597 87 7 m Physics Education 38 (23) 429 dx dy dv x dv y = v x (1) = v y (2) = G M r 3 x (3) = G M r 3 y (4) (5)
Jawny Euler dla ciała w centralnym dx = v x (6) dy = v y (7) dv x = G M r x 3 (8) dv y = G M r y 3 (9) parametry Ziemi do startu: odległość Ziemi od Słońca w peryhelium:.9832917 jedn. at. wtedy prędkość Ziemi 3.29 km/s. x n+1 = x n + (v x ) n t (1) y n+1 = y n + (v y ) n t (11) (v x ) n+1 = (v x ) n G M x n t (12) rn 3 (v y ) n+1 = (v y ) n G M y n t (13) rn 3
Orbita Ziemi y [jedn.astro.] 2 1.5 1.5 -.5 krok t = 15 minut "fort.1" "slonce" y [jedn.astro.] 1.5 1.5 -.5 "fort.1" u 3:1-1 -1-1.5-2 -2-1.5-1 -.5.5 1 1.5 2-1.5 1 2 3 4 5 6 7 8 9 1 t [rok] x [jedn.astro.]
Orbita Ziemi y [jedn.astro.] 2 1.5 1.5 -.5 krok t =dzień "fort.1" "slonce" y [jedn.astro.] 1.5 1.5 -.5 "fort.1" u 3:1-1 -1-1.5-2 -2-1.5-1 -.5.5 1 1.5 2-1.5 1 2 3 4 5 6 7 8 9 1 t [rok] x [jedn.astro.]
Orbita Ziemi y [jedn.astro.] 2 1.5 1.5 -.5 krok t =tydzień "fort.1" "slonce" Ogólnie orbita Ziemi nie jest kłopotliwa do policzenia -1-1.5-2 -2-1.5-1 -.5.5 1 1.5 2 x [jedn.astro.]
Kometa Halleya M. Follows, Physics Education 38 (23) 429 preedkość w peryhelium: 54.6 km/s, a aphelium około 8 m/s czas obiegu około 75 lat
Kometa Halleya -1-2 -3-4 -2-1 1 2 "3min.dat" "1h.dat" "15min.dat" "slonce" y [jedn.astro.].5875.587.5865.586.5855 "1.dat" "1.dat" "1.dat" "1.dat" x [jedn.astro.] -.4 -.2.2.4.6 1 "3min.dat" u 3:2 "1h.dat" u 3:2 "15min.dat" u 3:2-1 -2-3 -4 5 1 15 2 25 x [jedn.astro.] wniosek: nawet 15 minut to zbyt długo na krok czasowy przy obiegu około 8 lat problemem jest peryhelium. wielkie siły i wielkie prędkości rozwijane przez kometę w pobliżu Słońca można zmienić metodę na bardziej dokładna (my znamy m. trapezów), ale tam również o obliczeniach numerycznych decydować będzie krok potrzebny do aphelium... t [rok]
Kontrola błędu w rozwiazaniu równania różnicowego dx = f (t, x) rozwiazanie dokładne x(t k ) rozwiazanie u różnicowego x k x(t k ) = x k + O( t) n+1, gdzie n rzad zbieżności metody. np. dla n = 1, dla trapezów n = 2 szereg Taylora x(t + t) = x(t) + f (t, x) t + t2 2 f (t, x) +..., ogólnie x(t k ) = x k + C t ( t) n+1 + O( t) n+2 wyliczyc C t to poznać wiodac a część błędu jak to zrobić?
Kontrola błędu w rozwiazaniu równania różnicowego dx = f (t, x) rachunek z krokiem t x k+1 = x k + W ( t), W ( t) - przepis metody x(t k+1 ) = x k+1 + C t ( t) n+1 + O( t) n+2 który przepis dokładniejszy (?) (minimalne - Euler - n = 1) rachunek z krokiem t/2: 2 kroki aby dojść do chwili t + t x k+1/2 = x k + W ( t/2) x k+1 = x k+1/2 + W ( t/2) w każdym kroku t/2 popełniamy bład C t ( t/2) n+1 x(t k+1 ) = x k+1 + 2Ct ( t 2 ) n+1 + O( t) n+2 C t ( t) n+1 2C t ( t/2) n+1 = x k+1 x k+1 C t ( t) n+1 (1 1 2 n ) = x k+1 x k+1 x(t k+1 ) = x k+1 + x k+1 x k+1 2 n 1 oszacowanie błędu: ɛ x k+1 x k+1 2 n 1 + O( t) n+2 zabieg szacowania błędu i lepszego rozwi azania przez obserwację zachowania metody zależnie od : ekstrapolacja Richardsona
Kontrola błędu w rozwiazaniu równania różnicowego zakładamy tolerancję błędu tol rachunek z krokiem t x k+1 = x k + W ( t), W ( t) - przepis metody x(t k+1 ) = x k+1 + C t ( t) n+1 + O( t) n+2 x k+1/2 = x k + W ( t/2) x k+1 = x k+1/2 + W ( t/2) ( x(t k+1 ) = x k+1 + t ) n+1 2Ct 2 + O( t) n+2 oszacowanie błędu: ɛ x k+1 x k+1 2 n 1 jeśli ɛ tol akceptujemy krok, przyjmujemy wyliczone wartości x k+1 i idziemy dalej t := t + t niezależnie od wartości ɛ zmieniamy krok czasowy tak, aby bład popełniany w pojedynczym kroku był bliski torelancji jest ɛ = C t ( t) n+1 chcemy tol = C t ( t(nowy)) n+1 ( t(nowy) = t tol ) 1 n+1 ɛ bezpieczniej: t(nowy) = c t ( tol ɛ ) 1 n+1, np. c =.9
problem ruchu w grawitacyjnym x n+1 = xn + (vx )n t (14) y n+1 = yn + (vy )n t (15) (vx ) n+1 = (vx )n G M r n 3 xn t (16) (vy ) n+1 = (vy )n G M r n 3 yn t (17) rachunek prowadzony z dwoma krokami czasowymi błędy szacowane dla położeń x/y ɛ x k+1 x k+1 2 n, maksymalny bład 1 porównywany z tolerancja krok akceptowany gdy bład mniejszy od tol zmiana t(nowy) =.9 t ( tol ɛ dla n = 1 ) 1 n+1
n=1 (Euler) iter= 151 continue c 2 kroki /2 vsx=vox vsy=voy sx=xo sy=yo vsx=vox vsy=voy sx=xo sy=yo call wykonajkrok(/2,dx,vox,voy,xo,yo) call wykonajkrok(/2,dx,vox,voy,xo,yo) c 1 krok call wykonajkrok(,dx,vsx,vsy,sx,sy) c porownujemy ex=(xo-sx)/(2**n-1) ey=(yo-sy)/(2**n-1) blond=abs(ex) if(abs(ey).gt.blond) blond=abs(ey) if(blond.lt.tol) then t=t+ iter=iter+1 write(18,13) xo/au,yo/au,t/rok,/36/24 else vox=vsx voy=vsy xo=sx yo=sy endif =*.9*(tol/blond)**(1./(n+1.)) if(t.lt.czas)goto 151
problem ruchu w grawitacyjnym y [jedn.astro.] -1-2 -3 "1.dat" "1.dat" "1.dat" "1.dat" x,y[j.at.] 5 1 x y -37-1.1-2.1-3 -4 5 1 15 2 25 3.1 t[lata] 5 1 x y -37 [dni] -4-2 -1 5 1 15 2 x [jedn.astro.] x,y[j.at.] -1-2.1 [dni] y [jedn.astro.].5875.587.5865.586 "1.dat" "1.dat" "1.dat" "1.dat" -3-4 5 1 15 2 25 3.1 t[lata] 5 1 x y -37.5855-1 1 -.4 -.2.2.4.6 x [jedn.astro.] po prawej od góry tol błędu: 1 m, 1 m, 1 m przy tolerancji błędu 1m krok czasowy t = 5.5 minuty w peryhelium do 5.5h w aphelium x,y[j.at.] -2.1-3 -4 5 1 15 2 25 3.1 t[lata] [dni]
trapezów dla układu równań x n+1 = x n + t 2 (v n+1 + v n) v n+1 = v n + t 2 układ równań nieliniowych: ( ) 1 dv m dx x n+1 αv n+1 1 dv m dx xn αvn F 1 (x n+1, v n+1 ) = x n+1 x n t 2 v n+1 t 2 vn F 2 (x n+1, v n+1 ) = v n+1 v n t 2 ( F1 F 1 ) ( x n+1 v n+1 F 2 F 2 x n+1 v n+1 x µ n+1,vµ n+1 ) 1 t 2 t d 2 V 2m dx 2 x µ 1 + t 2 α n+1 x µ n+1,vµ n+1 ( ( 1 dv m dx x n+1 αv n+1 x µ+1 n+1 x µ n+1 v µ+1 n+1 v µ n+1 ( ) ) x µ+1 n+1 x µ n+1 v µ+1 n+1 v µ n+1 ( ) t 2 1 dv m dx xn αvn ( ) F1 (x µ = n+1, v µ n+1 ) F 2 (x µ n+1, v µ n+1 ) ) (18) ( ) F1 (x µ = n+1, v µ n+1 ) F 2 (x µ n+1, v µ n+1 ) (19)
trapezów dla komety x n+1 = x n + t 2 ((vx ) n+1 + (v x ) n) (v x ) n+1 = (v x ) n + t 2 ((ax ) n+1 + (a x ) n) y n+1 = y n + t 2 ((vy ) n+1 + (v y ) n) (v y ) n+1 = (v y ) n + t 2 ((ay ) n+1 + (a y ) n) układ równań nieliniowych: a x = GM (x 2 +y 2 ) 3/2 x a y = GM (x 2 +y 2 ) 3/2 y F 1 (x n+1, y n+1, (v x ) n+1, (v y ) n+1 ) = x n+1 x n t 2 (vx ) n+1 t 2 (vx )n F 2 (x n+1, y n+1, (v x ) n+1, (v y ) n+1 ) = y n+1 y n t 2 (vy ) n+1 t 2 (vy )n F 3 (x n+1, y n+1, (v x ) n+1, (v y ) n+1 ) = (v x ) n+1 (v x ) n t 2 (ax ) n+1 t 2 (ax )n F 4 (x n+1, y n+1, (v x ) n+1, (v y ) n+1 ) = (v y ) n+1 (v y ) n t 2 (ay ) n+1 t 2 (ay )n F 1 x n+1 F 1 y n+1 F 1 (vx ) n+1 F 1 (vy ) n+1 F 2 x n+1 F 2 y n+1 F 2 (vx ) n+1 F 2 (vy ) n+1 F 3 x n+1 F 3 y n+1 F 3 (vx ) n+1 F 3 (vy ) n+1 F 4 x n+1 F 4 y n+1 F 4 (vx ) n+1 F 4 (vy ) n+1 µ x µ+1 n+1 x µ n+1 y µ+1 n+1 y µ n+1 (v x ) µ+1 n+1 (vx )µ n+1 (v y ) µ+1 n+1 (vy )µ n+1 = ( F1 F 2 F 3 F 4 ) (2) µ
x n+1 = x n + t 2 ((vx ) n+1 + (v x ) n) (v x ) n+1 = (v x ) n + t 2 ((ax ) n+1 + (a x ) n) y n+1 = y n + t 2 ((vy ) n+1 + (v y ) n) (v y ) n+1 = (v y ) n + t 2 ((ay ) n+1 + (a y ) n) t 2 t 2 1 t 2 1 t x (ax ) x (ay ) t 2 t 2 y (ax ) 1 2 y (ay ) 1 a x = GM (x 2 +y 2 ) 3/2 x a y = GM (x 2 +y 2 ) 3/2 y µ x µ+1 n+1 x µ n+1 y µ+1 n+1 y µ n+1 (v x ) µ+1 n+1 (vx )µ n+1 (v y ) µ+1 n+1 (vy )µ n+1 = ( F1 F 2 F 3 F 4 (21) )
wyniki metody trapezów ze stałym metoda trapezów metoda y [jedn.astro.] -1-2 -3 "3min.dat" "4h.dat" "1d.dat" -1-2 -3-4 "3min.dat" "1h.dat" "15min.dat" "slonce" -4-2 -1 5 1 15 2-2 -1 1 2 x [jedn.astro.] x [jedn.astro.] y [jedn.astro.] 5-1 -2 "3min.dat" u 3:2 "4h.dat" u 3:2 "1d.dat" u 3:2-37 1-1 -2-3 "3min.dat" u 3:2 "1h.dat" u 3:2 "15min.dat" u 3:2-3 -4-4 5 1 15 2 25 3 5 1 15 2 25 t [rok] t [rok]
wyniki metody trapezów z doborem metoda trapezów od góry tol 1m, 1m metoda od góry 1m, 1m x,y[j.at.] 5-1 -2-3 -4 1 x y -37.1.1 5 1 15 2 25 3.1 t[lata] [dni] x,y[j.at.] 5-1 -2-3 x y -37 1 1.1 [dni] -4 5 1 15 2 25 3.1 t[lata] przy tej samej tolerancji (1m) trapezów stawia znacznie dłuższe kroki ( 1) rachunek wzoru trapezów przy tej samej tolerencji jest jakościowo lepszy w ch - błędy się akumuluja (ten sam znak błędu w każdym kroku).
RK4 metoda trapezów: niejawna drugiego rzędu dokładności metody Rungego Kutty (poczatek XXw): metody jawne wysokiej dokładności du = f
RK4 dla autonomicznego układu równań dx dy dv x dv y du = f(u), u = (u 1, u 2, u 3, u 4 ) T, f = (f 1, f 2, f 3, f 4 ) T = v x (t) (22) = v y (t) (23) = G M x = ax (24) r 3 = G M y = ay (25) r 3 liczymy k 1 = f(u n 1 ) następnie kolejno k 2 = f(u n 1 + t 2 k 1) k 3 = f(u n 1 + t 2 k 2) k 4 = f(u n 1 + tk 3 ) u n = u n 1 + t 6 (k 1 + 2k 2 + 2k 3 + k 4 ) u 1 x (26) u 2 y (27) u 3 v x (28) u 4 v y (29) f 1 v x (3) f 2 v y (31) f 3 a x (32) f 4 a y (33)
subroutine wykonajkrok(,dx,vox,voy,xo,yo) implicit double precision(a-h,o-z) dimension xk(4,4),uk(4,4),u(4) uk(1,1)=xo uk(1,2)=yo uk(1,3)=vox uk(1,4)=voy xk(1,1)=uk(1,3) xk(1,2)=uk(1,4) xk(1,3)=ax(uk(1,1),uk(1,2)) xk(1,4)=ay(uk(1,1),uk(1,2)) xk(2,1)=uk(1,3)+xk(1,3)*/2 xk(2,2)=uk(1,4)+xk(1,4)*/2 xk(2,3)=ax(uk(1,1)+/2*xk(1,1),uk(1,2)+/2*xk(1,2)) xk(2,4)=ay(uk(1,1)+/2*xk(1,1),uk(1,2)+/2*xk(1,2)) xk(3,1)=uk(1,3)+xk(2,3)*/2 xk(3,2)=uk(1,4)+xk(2,4)*/2 xk(3,3)=ax(uk(1,1)+/2*xk(2,1),uk(1,2)+/2*xk(2,2)) xk(3,4)=ay(uk(1,1)+/2*xk(2,1),uk(1,2)+/2*xk(2,2)) xk(4,1)=uk(1,3)+xk(3,3)* xk(4,2)=uk(1,4)+xk(3,4)* xk(4,3)=ax(uk(1,1)+*xk(3,1),uk(1,2)+*xk(3,2)) xk(4,4)=ay(uk(1,1)+*xk(3,1),uk(1,2)+*xk(3,2)) do 1 i=1,4 u(i)=uk(1,i)+/6*(xk(1,i)+xk(4,i)+2*xk(2,i)+2*xk(3,i)) 1 continue xo=u(1) yo=u(2) vox=u(3) voy=u(4) end
wyniki metody RK4 ze stałym metoda trapezów metoda RK4 y [jedn.astro.] -1-2 -3 "3min.dat" "4h.dat" "1d.dat" -1-2 -3 "1d.dat" "2d.dat" "tydzien.dat" -4-2 -1 5 1 15 2-4 -2-1 5 1 15 2 x [jedn.astro.] x [jedn.astro.] y [jedn.astro.] 5 "3min.dat" u 3:2 "4h.dat" u 3:2 "1d.dat" u 3:2-37 -1-2 -3-4 5 1 15 2 25 3 t [rok] 5-1 -2-3 -4 5 1 15 2 25 3 t [rok] "1d.dat" u 3:2 "2d.dat" u 3:2 "tydzien.dat" u 3:2-37
wyniki metody trapezów z doborem metoda trapezów od góry tol 1m, 1m metoda RK4 od góry 1m, 1m x,y[j.at.] 5-1 -2-3 -4 1 x y -37 1 1 1 5 1 15 2 25 3.1 t[lata] [dni] x,y[j.at.] 5-1 -2-3 x y -37 1 1 1 [dni] -4 5 1 15 2 25 3 1 t[lata]
krok czasowy w RK4 i metodzie [dni] 1 1 1 1.1 RK4 tol 1m RK4 tol 1km Euler tol 1m Euler tol 1km.1.1.1 5 1 15 2 25 3 35 4 r[au]
rekomendacja: jeśli problem nie jest sztywny, wybierajmy metodę RK4 jeśli problem wykazuje sztywność - wybierajmy metodę trapezów