Metody numeryczne I
Transkrypt
Metody numeryczne I
Metody numeryczne I Różniczkowanie Janusz Szwabiński [email protected] Metody numeryczne I (C) 2004 Janusz Szwabiński – p.1/31 Różniczkowanie numeryczne 1. Pierwsza pochodna funkcji • uwagi ogólne • bład ˛ obci˛ecia • bł˛edy zaokraglenia ˛ 2. Druga pochodna funkcji 3. Ekstrapolacja Richardsona Metody numeryczne I (C) 2004 Janusz Szwabiński – p.2/31 Pierwsza pochodna funkcji f - funkcja określona na siatce {x0 , x1 , . . . , xn } fk = f (xk ) fk0 = f 0 (xk ) h - odległość mi˛edzy punktami w˛ezłowymi Pierwsza pochodna funkcji: f (xk + ∆x) − f (xk ) f (xk ) = lim ∆x→0 ∆x 0 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.3/31 ⇒ najprostsze przybliżenia: • wzór dwupunktowy “w przód” fk0 fk+1 − fk ' , 0<k<n h • wzór dwupunktowy “w tył” fk0 fk − fk−1 ' , 0<k<n h Metody numeryczne I (C) 2004 Janusz Szwabiński – p.4/31 Bład ˛ obci˛ecia Rozwijamy f (x) w szereg Taylora 2 h f (xk + h) = f (xk ) + hf 0 (xk ) + f 00 (xk ) + . . . 2! 2 h f (xk − h) = f (xk ) − hf 0 (xk ) + f 00 (xk ) + . . . 2! Stad ˛ wynika fk0 fk0 fk+1 − fk = + O(h) h fk − fk−1 = + O(h) h Metody numeryczne I (C) 2004 Janusz Szwabiński – p.5/31 ⇒ zmniejsz h, aby zwi˛ekszyć dokładność Wady: • wolna zbieżność • koszt obliczenia rośnie na ogół gwałtownie z malejacym ˛ h Alternatywa: • wzory wielopunktowe Metody numeryczne I (C) 2004 Janusz Szwabiński – p.6/31 Wzór trójpunktowy Ponownie rozwijamy f (x) w szereg Taylora fk+1 fk−1 2 h = fk + hfk0 + fk00 + . . . 2! h2 00 0 = fk − hfk + fk + . . . 2! Stad ˛ fk+1 − fk−1 = 2hfk0 2h3 000 + fk + O(h4 ) 3! czyli fk0 fk+1 − fk−1 + O(h2 ) = 2h Metody numeryczne I (C) 2004 Janusz Szwabiński – p.7/31 Kiedy wzór trójpunktowy jest wystarczajacy? ˛ Niech f (x) = g exp(ikx) gdzie g i k to pewne liczby (k nie indeksuje tutaj w˛ezłów!) Zachodzi f 0 (x) = ikg exp(ikx) = ikf (x) Metody numeryczne I (C) 2004 Janusz Szwabiński – p.8/31 Z drugiej strony g ikx ikh geik(x+h) − geik(x−h) −ikh = e e −e 2h 2h f (x) = i sin kh ' ikf (x) = f 0 (x), h jeżeli tylko kh 1 ⇒ przybliżenie jest dobre, jeżeli f (x) zmienia si˛e wolno na odcinku o długości h Metody numeryczne I (C) 2004 Janusz Szwabiński – p.9/31 f f a) j-1 j j+1 x b) j-1 j j+1 x Metody numeryczne I (C) 2004 Janusz Szwabiński – p.10/31 Wzory wielopunktowe Wzór pi˛eciopunktowy: fk0 1 [−fk+2 + 8fk+1 − 8fk−1 + fk−2 ] + O(h4 ) = 12h Wzory wyższych rz˛edów analogicznie “Pułapka”: • im wi˛ecej punktów, tym trudniej wyznaczyć pochodna˛ w punktach brzegowych x0 i xn Metody numeryczne I (C) 2004 Janusz Szwabiński – p.11/31 Bł˛edy zaokraglenia ˛ Źródła: • obliczanie x + h • obliczanie f (x + h) − f (x) Przykład Niech x = 10, 3; h = 0, 0001 ⇒ ani x ani x + h nie maja˛ dokładnej reprezentacji maszynowej ⇒ w˛ezły obarczone bł˛edem wzgl˛ednym M ' 2−M (M liczba bitów w cz˛eści ułamkowej) Metody numeryczne I (C) 2004 Janusz Szwabiński – p.12/31 Stad ˛ h̃ = (x + h) − x jest obarczone bł˛edem rz˛edu ∆h̃ ∼ M ∗ x, a zatem ∆h̃ ∼ 10−2 h ⇒ stosujac ˛ wzór dwupunktowy, popełnimy bład ˛ wzgl˛edny rz˛edu co najmniej 10−2 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.13/31 ⇒ wybieraj h tak, aby x + h i x różniły si˛e zawsze o liczb˛e maszynowa˛ Najprostsza implementacja: temp=x+h call nic_nie_rob(temp) h=temp-x Metody numeryczne I (C) 2004 Janusz Szwabiński – p.14/31 Bł˛edy obci˛ecia i zaokraglenia ˛ Jeśli h jest dokładne, bład ˛ zaokraglenia ˛ we wzorze dwupunktowym wynosi f (x) , r ∼ f h gdzie f - wzgl˛edna dokładność f (x) Dla prostych funkcji zachodzi f ' M Metody numeryczne I (C) 2004 Janusz Szwabiński – p.15/31 Ponadto, bład ˛ obci˛ecia jest rz˛edu t ∼ |hf 00 (x)| Należy wybrać h tak, aby f (x) + |hf 00 (x)| r + t ∼ f h przyj˛eło wartość minimalna,˛ tzn. Metody numeryczne I (C) 2004 Janusz Szwabiński – p.16/31 |f (x)| 00 −f + |f (x)| = 0 ⇒ h ∼ 2 h gdzie s f (x) √ f 00 ≈ xc f , f (x) s f (x) xc ≡ 00 - “skala krzywizny” funkcji f (x) f (x) Metody numeryczne I (C) 2004 Janusz Szwabiński – p.17/31 Przy założeniu (na ogół słusznym), że f , f 0 i f 00 maja˛ ta˛ sama˛ długość charakterystyczna,˛ otrzymujemy dla wzoru dwupunktowego s f f 00 √ r + t √ f ∼ f 2 ∼ 0 0 |f | f √ ⇒ w najlepszym wypadku bład ˛ jest rz˛edu M Metody numeryczne I (C) 2004 Janusz Szwabiński – p.18/31 Podobnie, dla wzoru trójpunktowego powinno być 1/3 f f 1/3 h∼ ∼ ( ) xc f 000 f oraz r + t 2/3 ) ∼ ( f |f 0 | ⇒ bład ˛ na ogół o rzad ˛ lub dwa mniejszy niż dla wzoru dwupunktowego Metody numeryczne I (C) 2004 Janusz Szwabiński – p.19/31 Aby zminimalizować bład ˛ przybliżenia pochodnej, wybierz h tak, aby • było liczba˛ maszynowa˛ • było iloczynem odpowiedniej pot˛egi f (lub M ) i długości charakteryzujacej ˛ rozważana˛ funkcj˛e Metody numeryczne I (C) 2004 Janusz Szwabiński – p.20/31 Druga pochodna fk+1 − 2fk + fk−1 = h2 fk00 + O(h4 ) ⇒ wzór trójpunktowy na druga˛ pochodna: ˛ fk00 fk+1 − 2fk + fk−1 2 = + O(h ) 2 h Biorac ˛ kombinacj˛e rozwini˛eć fk±2 i fk±1 , otrzymamy wzór pi˛eciopunktowy fk00 1 = [−fk−2 + 16fk−1 − 30fk + 16fk+1 − fk+2 ] 2 12h Metody numeryczne I (C) 2004 Janusz Szwabiński – p.21/31 Kiedy wzór trójpunktowy jest wystarczajacy? ˛ Niech f (x) = g exp(ikx) ⇒ f 00 (x) = (ik)2 geikx = −k 2 f (x) Zachodzi ikh 1 geik(x+h) − 2geikx + geik(x−h) −ikh = 2 f (x) e − 2 + e 2 h h 2 = 2 f (x)[cos kh − 1] ' −k 2 f (x) h jeżeli kh 1 ⇒ dobre przybliżenie dla funkcji wolnozmiennej Metody numeryczne I (C) 2004 Janusz Szwabiński – p.22/31 Punkty brzegowe SUBROUTINE THREE_POINT (N,H,FUN,F1,F2) IMPLICIT NONE INTEGER, INTENT (IN) :: N INTEGER :: I REAL, INTENT (IN) :: H REAL, INTENT (IN), DIMENSION (N) :: FUN REAL, INTENT (OUT), DIMENSION (N) :: F1,F2 if (H .eq. 0.d0) STOP ’THREE_POINT: H=0’ DO I = 2, N-1 F1(I) = (FUN(I+1)-FUN(I-1))/(2.*H) F2(I) = (FUN(I+1)-2.0*FUN(I)+FUN(I-1))/(H*H) END DO ! Liniowa ekstrapolacja na brzegach F1(1) = 2.0*F1(2)-F1(3) F1(N) = 2.0*F1(N-1)-F1(N-2) F2(1) = 2.0*F2(2)-F2(3) F2(N) = 2.0*F2(N-1)-F2(N-2) END SUBROUTINE THREE_POINT Metody numeryczne I (C) 2004 Janusz Szwabiński – p.23/31 Przykłady f (x) = sin x, wzór trójpunktowy, 101 punktów w˛ezłowych: x f0 E(f 0 ) f 00 E(f 00 ) 0 1,000206 0,000206 0,000000 0,000000 π 10 π 5 3π 10 2π 5 π 2 0,951017 -0,000039 -0,309087 -0,000070 0,808985 -0,000032 -0,587736 0,000049 0,587762 -0,000023 -0,809013 0,000004 0,309003 -0,000014 -0,951055 0,000001 0,000006 0,000006 -1,000335 -0,000335 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.24/31 d sin x dx x=1 h (= 0.540302) w funkcji h dwupunktowy (przód) dwupunktowy (tył) trójpunktowy f0 |E(f 0 )| f0 |E(f 0 )| f0 |E(f 0 )| 0,5 0,312048 0,228254 0,724091 0,183789 0,518069 0,022233 0,1 0,497364 0,042938 0,581440 0,041138 0,539402 0,000900 0,05 0,519046 0,021257 0,561109 0,020806 0,540077 0,000225 0,01 0,536090 0,004212 0,544500 0,004198 0,540295 0,000007 0,005 0,538206 0,002096 0,542402 0,002100 0,540304 0,000002 0,001 0,539958 0,000344 0,540674 0,000371 0,540316 0,000014 0,0005 0,540257 0,000046 0,540376 0,000073 0,540316 0,000014 0,0001 0,540614 0,000312 0,540018 0,000284 0,540316 0,000014 0,00005 0,540018 0,000284 0,540018 0,000284 0,540018 0,000284 0,00001 0,542402 0,002100 0,536442 0,003861 0,539422 0,000880 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.25/31 Ekstrapolacja Richardsona Rozważmy jeszcze raz f (x + h) = ∞ X f (k) (x) k=0 ∞ X k! hk (k) f (x) k k f (x − h) = (−1) h k! k=0 Obliczajac ˛ różnic˛e f (x + h) − f (x − h) otrzymamy wzór trójpunktowy na pierwsza˛ pochodna˛ ∞ X f (x + h) − f (x − h) 0 αk h2k = f (x) + 2h k=1 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.26/31 Niech f (x + h) − f (x − h) D0 (h) ≡ 2h Obliczmy D0 (h) dla dwóch różnych wartości h: D0 (h) = f 0 (x) + D0 (qh) = f 0 (x) + ∞ X k=1 ∞ X αk h2k q 2k αk h2k k=1 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.27/31 Rozważmy różnic˛e q 2 D0 (h) − D0 (qh) = (q 2 − 1)f 0 (x) + 2 α̃k = q αk 1 − q Stad ˛ ∞ X α̃k h2k k=2 2(k−1) q 2 D0 (h) − D0 (qh) D1 (h) ≡ q2 − 1 ∞ X 1 = f 0 (x) + 2 α̃k h2k q − 1 k=2 ⇒ otrzymaliśmy przybliżenie rz˛edu O(h4 ) dla pochodnej Metody numeryczne I (C) 2004 Janusz Szwabiński – p.28/31 Ogólnie, dysponujac ˛ przybliżeniami pewnego rz˛edu, obliczamy przybliżenie wyższego rz˛edu ze wzoru q 2k Dk−1 (h) − Dk−1 (qh) Dk (h) = q 2k − 1 ⇒ najprostszy sposób konstrukcji wyników o pomijalnym bł˛edzie obci˛ecia Metody numeryczne I (C) 2004 Janusz Szwabiński – p.29/31 D0 (h) D0 ( h2 ) D1 ( h2 ) D0 ( h4 ) D1 ( h4 ) D2 ( h4 ) D0 ( h8 ) .. . D1 ( h8 ) D2 ( h8 ) D3 ( h8 ) .. .. .. . . . .. . • pierwsza kolumna - wyniki obliczeń ze wzoru trójpunktowego • elementy tabeli obliczamy wiersz po wierszu do osiagni˛ ˛ ecia żadanej ˛ dokładności Metody numeryczne I (C) 2004 Janusz Szwabiński – p.30/31 Przykład d sin x dx (= 0.540302) x=1 Wzór trójpunktowy Ekstrapolacja Richardsona f0 |E(f 0 )| f0 |E(f 0 )| h = 0, 1 0,539402 0,000900 0,549402 0,000900 h 2 h 4 h 8 h 16 h 32 0,540077 0,000225 0,540302 0,000000 0,540245 0,000058 0,540301 0,000001 0,540290 0,000012 0,540305 0,000003 0,540295 0,000008 0,540296 0,000006 0,540314 0,000011 0,540321 0,000019 Metody numeryczne I (C) 2004 Janusz Szwabiński – p.31/31