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