Sformułowanie zadania interpolacji Metody Numeryczne Wykład 4 Wykład 5 Interpolacja wielomianowa Niech D R i niech F bȩdzie pewnym zbiorem funkcji f : D R. Niech x 0, x 1,..., x n bȩdzie ustalonym zbiorem parami różnych punktów z D, zwanych wȩzłami. Mówimy, że wielomian w interpoluje funkcjȩ f F w wȩzłach x j, gdy w(x j ) = f(x j ), 0 j n. Oznaczmy przez Π n przestrzeń liniow a wielomianów stopnia co najwyżej n o współczynnikach rzeczywistych, Π n = {w(x) = a n x n + a n 1 x n 1 +... + a 1 x + a 0 : a j R, 0 j n}. Twierdzenie Dla dowolnej funkcji f : D R, istnieje dokładnie jeden wielomian interpolacyjny w Π n interpoluj acy f w wȩzłach x j, 0 j n. Dowód Wybierzmy w Π n dowoln a bazȩ wielomianów φ j, 0 j n, Wtedy Π n = span{φ 0, φ 1,..., φ n }. gdzie span oznacza powłokȩ liniow a, czyli zbiór wszystkich kombinacji liniowych funkcji φ j, 0 j n. Każdy wielomian z Π n można wiȩc jednoznacznie przedstawić w postaci rozwiniȩcia wzglȩdem wybranej bazy. Warunkiem koniecznym i dostatecznym na to, aby wielomian w( ) = n j=0 c jφ j ( ) interpolował f, jest spełnienie układu (n + 1) równań liniowych n c j φ j (x i ) = f(x i ), 0 i n. j=0 z n + 1 niewiadomymi c j, który w postaci macierzowej ma postać 1
φ 0 (x 0 ) φ 1 (x 0 )... φ n (x 0 ) φ 0 (x 1 ) φ 1 (x 1 )... φ n (x 1 ). φ 0 (x n ) φ 1 (x n )... φ n (x n ) c 0 c 1. c n = f(x 0 ) f(x 1 ). f(x n ) Aby wykazać, że ten układ ma jednoznaczne rozwi azanie wystarczy, aby wektor zerowy był jedynym rozwi azniem układu jednorodnego. Zauważmy, że układ jednorodny odpowiada interpolacji danych zerowych i f(x i ) = 0. Istnienie niezerowego rozwi azania byłoby wiȩc równoważne istnieniu niezerowego wielomianu stopnia nie wiȩkszego od n, który miałby n + 1 różnych zer x i, co jest niemożliwe, a wiȩc wektor zerowy jest jedynym rozwi azaniem układu jednorodnego, co mieliśmy wykazać. W danym modelu obliczeniowym możemy wiȩc wyznaczać jednoznacznie współczynniki c j wielomianu w. Dokładniej Jeżeli (φ j ) n j=0 jest baz a przestrzeni Π n wielomianów stopnia co najwyżej n, to zadanie iterpolacji wielomianowej polega na obliczeniu dla danej funkcji f współczynników c j takich, że wielomian n w( ) = c j φ j ( ) interpoluje f w punktach x j, 0 j n. Wybór bazy wielomianowej j=0 Można powiedzieć, że trudność zadania interpolacji jest zdeterminowana przez rozwi azanie powyższego układu i zależy w istotny sposób od wybranej bazy (φ j ) n j=0. W naturalny wiȩc sposób powstaje problem wyboru wygodnej bazy w Π n. Rozpatrzymy trzy bazy: Lagrange, potȩgow a i Newtona. BAZA LAGRANGE (KANONICZNA) Zdefiniujemy dla 0 j n wielomiany. l j (x) = (x x 0)(x x 1 )... (x x j 1 )(x x j+1 )... (x x n ) (x j x 0 )(x j x 1 )... (x j x j 1 )(x j x j+1 )... (x j x n ). Zauważmy że każdy wielomian l j jest stopnia dokładnie n oraz { 0 i j, l j (x i ) = 1 i = j. St ad widać, że wielomiany te stanowi a bazȩ w Π n, któr a nazywamy baz a Lagrange. Wielomian interpolacyjny dla funkcji f zwany wielomianem interpolacyjnym Lagrange, 2
można w tym przypadku zapisać jako w( ) = n f(x j )l j ( ). j=0 Przykład Skonstruujemy wielomian interpolacyjny Lagrange dla danych (1, 1), (2, ), (4, ). l 0 (x) = a(x 2)(x 4), bo musi siȩ zerować w punktach x = 2, x = 4. Ż adaj ac l 0 (1) = 1 - otrzymujemy równanie na nieznany współczynnik a, a(1 2)(1 4) = 1, a = 1 i l 0(x) = 1 (x 2)(x 4). Podobnie określamy l 1 (x) = 1 (x 1)(x 4) 2, l 2 (x) = 1 (x 1)(x 2). 6 St ad otrzymujemy nastȩpuj ac a postać wielomianu Lagrange: w 2 (x) = f(x 0) (x 2)(x 4) f(x 1) 2 (x 1)(x 4) + f(x 2) (x 1)(x 2) 6 = 1 (x 2)(x 4) 2 (x 1)(x 4) + (x 1)(x 2) 6 Do obliczenia współczynników wielomianu Lagrange i jego wartości w zadanym punkcie p, możemy napisać skrypt funkcyjny w OCTAVE na przykład o nazwie lagrange.m f unction lagrange(x, y, p) n = length(x); w = 0; for k = 1 : n b(k) = 1; d(k) = 1; for j = 1 : n if j k b(k) = b(k) (x(k) x(j)); d(k) = d(k) (p x(j)); c(k) = y(k)/b(k); w = w + c(k) d(k); c;w
BAZA POTȨGOWA (NATURALNA) Znacznie prościej można obliczyć wartość wielomianu interpolacyjnego (a także jego pochodnych), gdy jest on dany w najczȩściej używanej bazie potȩgowej, φ j (x) = x j. Jeśli w(x) = a 0 + a 1 x +... + a n x n, to również w(x) = (... (a n x + a n 1 )x + a n 2 )x +... + a 1 )x + a 0, co sugeruje zastosowanie nastȩpuj acego schematu Hornera do obliczenia wartości wielomianu w(x).: v n = a n ; for j = (n 1) : 0 v j = v j+1 x + a j, Po wykonaniu tego algorytmu w(x) = v 0. Schemat Hornera wymaga wykonania tylko n mnożeń i n dodawań. Zauważmy jednak że w przypadku bazy potȩgowej macierz (x j i )n i,j=0 układu jest pełna. Jest to tzw. macierz Vandermonde. Obliczenie współczynników wielomianu interpolacyjnego w bazie potȩgowej bezpośrednio z tego układu jest kosztowne bo wymaga n operacji. Przykład Znajdziemy wielomian interpolacyjny w bazie potȩgowej w 2 (x) = c 0 + c 1 x + c 2 x 2 przechodz acy przez punkty (1, 1), (2, ) i (4, ). Warunki interpolacji w 2 (x 0 ) = c 0 + 1c 1 + 1c 2 = 1, w 2 (x 1 ) = c 0 + 2c 1 + 4c 2 =, w 2 (x 2 ) = c 0 + 4c 1 + 16c 2 =. Postać macierzowa tego układu równań liniowych 1 1 1 c 0 1 2 4 c 1 = 1 4 16 c 2 1 Rozwi azuj ac ten układ za pomoc a OCTAVE A = [1 1 1; 1 2 4; 1 4 16]; 4
b = [1; ; ]; c = A\b Uwzglȩdniaj ac błȩdy zaokr agleń otrzymujemy c 0 = 7, c 1 = 4, c 2 = 2. Wielomian interpolacyjny ma wiȩc postać w 2 (x) = ( 2x 2 + 12x 7)/ BAZA NEWTONA Rozwi azaniem pośrednim, które ł aczy prostotȩ obliczenia współczynników z prostot a obliczenia wielomianu w(x) jest wybór bazy Newtona. p 0 (x) = 1, p j (x) = (x x 0 )(x x 1 )... (x x j 1 ), 1 j n. W tym przypadku współczynniki rozwiniȩcia wielomianu interpolacyjnego bȩdziemy oznaczać przez b j, zaś wielomian Newtona ma postać w = n b j p j j=0 Zwróćmy uwagȩ na ważn a własność wielomianu Newtona, wynikaj a z konstrukcji jego bazy. Jeśli w j Π j jest wielomianem interpolacyjnym dla funkcji f opartym na wȩzłach x 0, x 1,..., x j, 0 j n,to w 0 = b 0 w j = w j 1 + b j p j, 1 j n Wartość w(x) można obliczać, stosuj ac prost a modyfikacjȩ algorytmu Hornera: v n = b n ; forj = n 1 : 0; v j = v j 1 (x x j ) + b j. Ponadto układ równań jest trójk atny dolny ( tzn.p j (x i ) = 0 dla i < j),co pozwala na obliczenie algorytmem, który Państwo poznaliście na wykładzie o koszcie n 2, b 0 = f(x 0 ); for j = 1 : n 5
( b j = f(x j ) ) j 1 s=0 b sp s (x j ) /p j (x j ). Zwykle jednak do obliczania współczynników b j stosuje inny algorytm, który teraz przedstawimy. Algorytm różnic dzielonych Różnicȩ dzielon a funkcji f opart a na różnych w azłach t 0, t 1,..., t s, gdzie s 1, definiuje siȩ indukcyjnie jako f[t 0, t 1,..., t s ] = f[t 1, t 2,..., t s ] f[t 0, t 1,..., t s 1 ] t s t 0 Zachodzi nastȩpuj ace ważne twierdzenie o współczynnikach wielomianu interpolacyjnego Newtona. Twierdzenie Współczynniki wielomianu interpolacyjnego Newtona dla danej funkcji f dane s a przez różnice dzielone f w wȩzłach x 0, x 1,..., x j, tzn. b j = f[x 0, x 1,..., x j ], 0 j n Dowód Dla 0 i j n, oznaczmy przez w i,j wielomian z Π j i interpoluj acy f w wȩzłach x i, x i+1,..., x j. Wtedy ma miejsce nastȩpuj aca równość dla i < j: x wi,j (x) = (x x i)w i+1,j (x x j )w i,j 1 (x), (x j x i ) Aby wykazać tȩ równość wystarczy pokazać, że prawa jej strona, któr a oznaczymy przez v(x), przyjmuje wartości f(x s ) dla x = x s, i s j. Jeśli i + 1 s j 1 to Ponadto oraz v(x s ) = (x s x i )f(x s ) (x s x j )f(x s ) x j x i = f(x s ). v(x i ) = (x i x j ) x j x i f(x i ) = f(x i ) v(x j ) = (x j x i ) x j x i f(x j ) = f(x j ) 6
Wykazaliśmy, że v jest wielomianem z Π j i interpoluj acym f w wȩzłach x s, i s j, czyli w i,j = v. Dalej postȩpujemy indukcyjnie ze wzglȩdu na stopień wielomianu interpolacyjnego. Dla n = 0 mamy b 0 = f(x 0. Niech n 1. Jak wiemy z konstrukcji wielomianu Newtona w 0,n = w 0,n 1 (x) + b n p n (x) i z założenia indukcyjnego b j = f[x 0, x 1,..., x j ], dla 0 j n 1 Aby pokazać podobn a równość dla b n wykorzysamy równość na w i,j z i = 0, j = n, która ma wtedy postać w 0,n (x) = (x x 0)w 1,n (x) (x x n )w 0,n 1 (x) x n x 0 Zauważmy, że b n jest współczynnikiem przy x n w wielomianie w 0,n. Z zal ożenia indukcyjnego wynika, że współczynniki przy x n 1 w wielomianach w 1,n, w 0,n 1 s a ilorazami różnicowymi opartymi odpowiednio na wȩzłach x 1, x 2,..., x n,i x 0, x 1,... x n 1. St ad b n = f[x 1, x 2,..., x n ] f[x 0, x 1,..., x n 1 ] x n x 0 = f[x 0, x 1,..., x n ] co mieliśmy udowodnić. Różnicȩ dzielon a można obliczć na podstawie wartości f(x j ), 0 j n, buduj ac tabelkȩ x 0 f[x 0 ] x 1 f[x 1 ] f[x 0, x 1 ] x 2 f[x 2 ] f[x 1, x 2 ]. x n f[x n ] f[x n 1, x n ]... f[x 0, x 1,..., x n ]. Zauważmy, że po drodze obliczamy f[x i, x i+1,..., x j ] dla wszystkich 0 i < j n, a wiȩc w szczególności interesuj ace nas różnice dzielone f[x 0, x 1,..., x n ]. Przykład Znajdziemy wielomian Newtona interpoluj acy dane: (1, 1), (2, ), (4, ). Obliczamy różnice dzielone f[x 0, x 1 ] = f[x 1] f[x 0 ] x 1 x 0 f[x 1, x 2 ] = f[x 2] f[x 1 ] x 2 x 1 = 1 2 1 = 2 = 4 2 = 0 7
f[x 0, x 1, x 2 ] = f[x 1,x 2 ] f[x 1,x 0 ] x 2 x 0 = 0 2 4 1 = 2 Wielomian interpolacyjny Lagrange w(x) = f[x 0 ]+f[x 0, x 1 ](x x 0 )+f[x 0, x 1, x 2 ](x x 0 )(x x 1 ) = 1+2(x 1) 2 (x 1)(x 2) W postaci zagnieżdżonej w(x) = 1 + (x 1) (2 2 ) (x 2). Przykładowe programy w OCTAVE, pierwszy generuj acy różnice dzielone o nazwie divdif.m, drugi obliczaj acy wartość wielomianu Newtona w dowolnym punkcie x o nazwie newt.m i korzystaj acy z programu pierwszego, zamieszczono w oddzielnych m.files. 8