II. RÓŻNICZKOWANIE I CAŁKOWANIE NUMERYCZNE Janusz Adamowski 1
1 Różniczkowanie numeryczne Rozważmy funkcję f(x) określoną na sieci równoodległyc węzłów. Funkcja f(x) może być dana za pomocą wzoru analitycznego lub za pomocą tabeli wartości. Definiujemy sieć węzłów oraz odpowiadającyc im wartości funkcji x n = n, (n =, ±1, ±2,... ) (1) Naszym celem jest wyznaczenie pierwszej pocodnej za pomocą wartości f n. f n = f(x n ). (2) f = f () (3) Pocodną w dowolnym punkcie x = x n znajdziemy dokonując translacji otrzymanego wyniku dla x = o wartość x n. Oznacza to, że dokonujemy zmiany zmiennyc: x x = x + x n. Rozwijamy funkcje f(x) w szereg Taylora wokół punktu x =. f(x) = f + xf + x2 2! f + x3 3! f + x4 4! f iv + x5 5! f v +... (4) przy czym wszystkie pocodne obliczane są w punkcie x =. Na podstawie wzoru (4) obliczamy oraz f ±1 = f(±) = f ± f + 2 2 f ± 3 6 f + 4 4! f iv ± 5 5! f v + O( 6 ) (5) f ±2 = f(±2) = f ± 2f + 2 2 f ± 43 3 f + 24 3 f iv ± 5 5! f v + O( 6 ). (6) W powyższyc wzorac O( 6 ) oznacza wyrazy rzędu 6 i rzędów wyższyc. Przy oszacowaniu rzędu wielkości kolejnyc wyrazów rozwinięcia Taylora zakładamy, że funkcja f(x) i wszystkie jej pocodne są wielkościami tego samego rzędu. Zgodnie z wzorem (5) otrzymujemy a stąd f +1 f 1 = 2f + 3 3 f + O( 5 ), (7) f = f 1 f 1 2 2 6 f + O( 4 ). (8)
Ze wzoru (8) wynika trójpunktowa aproksymacja pierwszej pocodnej f = f 1 f 1 + O( 2 ). (9) 2 Jeżeli w przedziale [, ] funkcja f(x) jest wielomianem drugiego stopnia, to wzór (9) (bez drugiego wyrazu po prawej stronie) jest dokładny. Wzór ten wykorzystuje symetryczną różnicę wartości funkcji f wokół punktu x = (trzy punkty na osi x). W celu oszacowania pierwszej pocodnej funkcji f(x) można również użyć innyc różnic, a mianowicie różnicy do przodu (przedniej) lub różnicy do tyłu (tylnej) f = f 1 f f = f f 1 + O() (1) + O() (11) Wzory (1) i (11) są dwupunktowymi aproksymacjami pierwszej pocodnej. Błąd popełniany przy użyciu dwupunktowyc wzorów (1) i (11) jest o jeden rząd wielkości większy niż we wzorze (9). Wzory (1) i (11) opierają się na liniowej interpolacji funkcji f(x) w podprzedziałac [, ] i [, ]. 2
Dokładność obliczania pierwszej pocodnej można poprawić używając wartości funkcji f(x) w punktac bardziej odległyc od punktu x =. Możemy w tym celu zastosować rozwinięcie (6), zgodnie z którym f 2 f 2 = 4f + 83 3 f + O( 5 ). (12) Uwaga Przy szacowaniu błędu we wzorze (12) korzystamy z faktu, że pomnożenie przez 2 n nie zmienia rzędu wielkości w rozwinięciu Taylora (4), czyli O[(2) 5 ] 25 5! 5 O( 5 ). Wynika to z następującego przejścia granicznego: 2 n lim n n!. Wzór (12) pozwala na obliczenie poprawki potrzebnej do oszacowania pierwszej pocodnej 3 3 f = f 1 f 1 2f + O( 5 ). (13) Podstawienie (13) do (8) prowadzi do f = 1 12 (f 2 8f 1 + 8f 1 f 2 ) + O( 4 ). (14) Otrzymujemy pięciopunktowy wzór na pierwszą pocodną (pięciopunktową aproksymację pierwszej pocodnej), który jest dokładniejszy o dwa rzędy wielkości od trójpunktowego wzoru (9). Wyższe pocodne obliczamy podobnie stosując odpowiednie kombinacje liniowe wzorów (5) i (6). Na przykład dodanie stronami wzorów (5) prowadzi do f 1 + f 1 = 2f + 2 f + O( 4 ). (15) Otrzymujemy stąd f = f 1 2f + f 1 2 + O( 2 ). (16) Jest to trójpunktowy wzór na drugą pocodną, czyli przybliżenie drugiej pocodnej z dokładnością do 2. Bardzo dużą dokładność przy numerycznym obliczaniu drugiej pocodnej funkcji f(x) można uzyskać stosując rozwinięcie f = 1 2 N n= N c n f n + O( 2N ), (17) w którym wartości współczynników podaje tabela wzięta z publikacji: B. Fornberg & D.M. Sloan, Acta Numerica 94 (ed. A. Iserles, Cambridge University Press, 1994). Wartości współczynników rozwinięcia we wzorze (17) podane są w tabeli 2.1. 3
Tabela 2.1. Wartości współczynników rozwinięcia we wzorze (17) dla różnej liczby wyrazów określonej przez N. N c c ±1 c ±2 c ±3 c ±4 c ±5 c ±6 1-2 1 2-5/2 4/3-1/12 3-49/18 3/2-2/2 1/9 4-25/72 8/5-1/5 8/315-1/56 5-5269/18 5/3-5/21 5/126-5/18 1/315 6-5369/18 12/7-15/56 1/189-1/112 2/1925-1/16632 Uwaga Podany powyżej sposób przybliżania pocodnyc, wykorzystujący rozwinięcie w szereg Taylora (4), można uogólnić na pocodne wyższyc rzędów. Ponadto możemy otrzymywać dokładniejsze przybliżenia pocodnyc pierwszej i drugiej. 2 Całkowanie numeryczne za pomocą metod klasycznyc Wstęp Szukamy wartości całki oznaczonej funkcji f(x) w przedziale [a, b], czyli b a f(x)dx. (18) W przedziale [a, b] możemy zdefiniować sieć jednakowo odległyc węzłów x n = a + n, gdzie n =, 1, 2,..., przy czym = b a N, (19) a N jest liczbą całkowitą. Wygodnie jest przyjąć, że N jest liczbą parzystą. Przy wyprowadzaniu większości metod numerycznego całkowania korzystamy z addytywności operacji całkowania a+2 + a+4... + b f(x) dx (2) a a+2 b 2 W celu numerycznego obliczenia całki I w skończonym przedziale [a, b] wystarczy znaleźć przybliżona formułę na całkę w podprzedziale [, 2] lub [, ], a następnie zastosować wzór (2). W przypadku zastosowania metody prostokątów stosujemy podział przedziału [a, b] na podprzedziały o szerokości. 2.1 Metoda prostokątów Metoda prostokątów opiera się na oszacowaniu pola pod krzywą y = f(x) za pomocą prostokątów. 4
do metody prostokątów. Ilustracja Startujemy z własności addytywności całkowania, czyli N 1 n= i n. (21) Zgodnie z metodą prostokątów obliczamy oszacowanie całki I jako sumę pól prostokątów, czyli całkę i n przybliżamy za pomocą wzoru Ostatecznie i n = x n+1 x n f(x)dx f(x n ) + O( 2 ) = f n + O( 2 ). (22) N 1 I f n + O(). (23) n= W metodzie prostokątów funkcję f(x) przybliżamy w przedziale [a, b] za pomocą funkcji przedziałami stałej równej f(x n ) w każdym podprzedziale [x n, x n+1 ]. 2.2 Metoda Newtona-Cotesa (metoda trapezów) Zgodnie z tą metodą funkcję podcałkową f(x) przybliżamy funkcję za pomocą funkcji liniowej w podprzedziałac [, ] i [, ] stosując przy tym dwupunktowe aproksymacje pierwszej pocodnej (1) i (11). f(x) = f + f f 1 x + O(x 2 ), x [, ], (24) 5
oraz f(x) = f + f 1 f x + O(x 2 ), x [, ]. (25) Następnie obliczamy całki po podprzedziałac [, ] i [, ], czyli i 1 = i 2 = Całkę po podprzedziale [, ] obliczamy jako sumę całek f(x)dx = f + f 1 f f(x)dx = f + f 1 f i = Otrzymujemy stąd wzór trapezów w postaci 2 2 + O(3 ) (26) 2 2 + O(3 ). (27) f(x)dx (28) i = i 1 + i 2. (29) i = 2 (f 1 + 2f + f 1 ) + O( 3 ) (3) Zauważmy, że wzór (3) jest wzorem na sumę pól trapezów. trapezu wyrażone jest wzorem Pole j-tego A j = 1 2 (wysokość) (suma podstaw). Wzór (3) można otrzymać z bezpośredniego sumowania pól trapezów A 1 + A 2, przy czym A 1 = 2 (f 1 + f ), (31) A 2 = 2 (f + f 1 ). (32) 2.3 Metoda Simpsona (metoda parabol) Przybliżamy funkcję f(x) za pomocą funkcji kwadratowej (paraboli). Stosujemy trójpunktowe aproksymacje pocodnyc pierwszej (9) i drugiej (16). f(x) = f + f 1 f 1 x + f 1 2f + f 1 2 2 2 x 2 + O(x 3 ) (33) dla przedziału x <. Zauważmy, że w tym przedziale wartości x maksymalny błąd popełniony w rozwinięciu (33) jest rzędu O( 2 )x O(x 3 ). 6
Obliczamy całkę i = f(x)dx podstawiając za f(x) rozwinięcie (33) i otrzymujemy i = 3 (f 1 + 4f + f 1 ) + O( 5 ). (34) Jest to wzór Simpsona (parabol), który jest dokładniejszy o dwa rzędy wielkości od wzoru trapezów. Całkę po przedziale [a, b] liczymy metodą Simpsona zgodnie z (2) następująco: [f(a) + 4f(a + ) + 2f(a + 2) + 4f(a + 3) 3 +2f(a + 4) +... + 2f(b 2) + 4f(b ) 2.4 Metody Gaussa +f(b)]. (35) Metody te opierają się na aproksymacji funkcji podcałkowej f(x) za pomocą wielomianu odpowiedniego stopnia, a następnie wykonaniu analitycznego całkowania tego wielomianu. W obliczeniac stosowane są najczęściej metody Gaussa w wersji zmodyfikowanej, zgodnie z którą funkcja podcałkowa ma postać iloczynu w(x)f(x), gdzie w(x) jest pewną znaną funkcją, tzw. funkcją wagową. Funkcja wagowa może być wybrana tak, aby usunąć osobliwości funkcji podcałkowej. Ogólny wzór na całkę obliczoną metodą Gaussa ma postać b a w(x)f(x)dx N w j f(x j ), (36) przy czym {w j } jest zbiorem wag, {x j } jest zbiorem współrzędnyc, natomiast j = 1,..., N. Jeżeli funkcja f(x) jest wielomianem stopnia N, to wzór (36) jest dokładny. Dla dowolnej funkcji f(x) wzór (36) podaje na ogół bardzo dokładną aproksymację całki. Rozmaitość metod Gaussa bierze się z użycia różnyc wielomianów ortogonalnyc do aproksymacji funkcji f(x). Np. mamy do dyspozycji metody Gaussa-Legendre a, Gaussa-Laguerre a, Gaussa-Hermite a, itd. We wzorze (36) wartości wag {w j } i położeń {x j } zależą od wielomianu wybranego do aproksymacji funkcji i są zwykle zadane w procedurze numerycznej. Stopień wielomianu N jest wybierany przez użytkownika. Określa on dokładność przybliżenia. Programy z zastosowaniem metod Gaussa dostępne są w większości bibliotek numerycznyc. j=1 7
2.5 Szczególne problemy przy całkowaniu numerycznym (A) Nieskończona granica całkowania Naszym zadaniem jest numeryczne obliczenie całki f(x) dx. (37) Do obliczenia całki (37) nie możemy zastosować w sposób bezpośredni podziału przedziału całkowania na skończoną sieć węzłów. Możemy natomiast zastosować jeden z następującyc sposobów postępowania. (1) Podział przedziału całkowania i zmiana zmiennej Przekształcamy całkę (37 następująco: c + c f(x)dx. (38) W drugiej całce podstawiamy t = 1/x, przy czym t 1/c. Otrzymujemy stąd c 1/c ( ) dx 1 f(x) dx + x 2 f. (39) x W ten sposób unikamy nieskończoności w górnej granicy całkowania. (2) Zmiana zmiennej przekształcająca nieskończony przedział całkowania w przedział skończony Dokonujemy podstawienia x = t 1 t, (4) które pozwala nam na przekształcenie całki (37) do postaci f(x)dx = 1 ( ) dt t (1 t) 2 f. (41) 1 t (B) Osobliwość w funkcji podcałkowej Metodę postępowania w tym przypadku pokażemy na przykładzie. 8
Powiedzmy, że naszym zadaniem jest numeryczne obliczenie całki 1 f(x)dx (42) z funkcji f(x), która posiada osobliwość typu f(x) 1/ x dla x. Zapisujemy całkę (42) w postaci sumy całek ε f(x)dx + 1 ε f(x)dx (43) Druga całka we wzorze (43) jest regularna i możemy ją obliczyć numerycznie. Pierwszą całkę obliczamy analitycznie jako ε dx x = 2 ε. (44) Odpowiedni dobór wartości ε (metodą prób i błędów) zapewnia żądaną dokładność. 9