MN09

Z Studia Informatyczne
Wersja z dnia 18:29, 1 wrz 2006 autorstwa Przykry (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Interpolacja wielomianowa

Zadanie interpolacji, czyli poprowadzenia krzywej zadanego rodzaju przez zestaw danych punktów, jest jednym z podstawowych zadań obliczeniowych. Stosuje się je nagminnie w najróżniejszych dziedzinach życia, np.

  • Na podstawie próbki sygnału dźwiękowego (to znaczy: ciągu wartości

amplitud sygnału zmierzonych w kolejnych odstępach czasu), odtworzyć jego przebieg.

  • Przybliżyć wykres skomplikowanej (lub wręcz nieznanej) funkcji na

podstawie jej wartości uprzednio stablicowanych w wybranych punktach

  • Interpolację stosuje się szczególnie chętnie w samej numeryce. Na przykład, idea

metody siecznych polega na tym, by funkcję, której miejsca zerowego szukamy, przybliżyć prostą interpolującą tę funkcję w dwóch punktach. Metody numerycznego całkowania oraz rozwiązywania równań różniczkowych także korzystają z interpolacji.

Niech Parser nie mógł rozpoznać (nieznana funkcja „\subsetR”): {\displaystyle \displaystyle D\subsetR} i niech F będzie pewnym zbiorem funkcji Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle f:D\toR} . Niech x0,x1,,xn będzie ustalonym zbiorem parami różnych punktów z D, zwanych później węzłami.

Powiemy, że wielomian w interpoluje funkcję fF w węzłach xj, gdy

w(xj)=f(xj),0jn.

Oznaczmy przez Πn przestrzeń liniową wielomianów stopnia co najwyżej n o współczynnikach rzeczywistych,

Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle \Pi_n\,=\,\{\,w(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0:\; a_j\inR, 0\le j\le n\,\}. }

Zadanie znalezienia wielomianu interpolującego zadane wartości, nazywamy zadaniem interpolacji Lagrange'a.

Plik:Lagrange.jpg
Lagrange
Zobacz biografię

Twierdzenie Istnienie i jednoznaczność zadania interpolacji Lagrange'a

Dla dowolnej funkcji Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle f:D\toR} istnieje dokładnie jeden wielomian wfΠn interpolujący f w węzłach xj, 0jn.

Dowód

Wybierzmy w Πn dowolną bazę wielomianów φj, 0jn,

Πn=span{φ0,φ1,,φn}.

Wtedy każdy wielomian z Πn można jednoznacznie przedstawić w postaci rozwinięcia względem wybranej bazy. Warunkiem koniecznym i dostatecznym na to, aby wielomian wf()=j=0ncjφj() interpolował f jest spełnienie układu n+1 równań liniowych

j=0ncjφj(xi)=f(xi),0in,

z n+1 niewiadomymi cj, który w postaci macierzowej wygląda następująco:

(φ0(x0)φ1(x0)φn(x0)φ0(x1)φ1(x1)φn(x1)φ0(xn)φ1(xn)φn(xn))(c0c1cn)=(f(x0)f(x1)f(xn)).

Aby wykazać, że układ ten ma jednoznaczne rozwiązanie wystarczy, aby wektor zerowy był jedynym rozwiązaniem układu jednorodnego. Rzeczywiście, układ jednorodny odpowiada interpolacji danych zerowych, f(xi)=0, i. Istnienie niezerowego rozwiązania 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 xi, co jest niemożliwe.

Zadanie znalezienia dla danej funkcji f jej wielomianu interpolacyjnego stopnia co najwyżej n jest więc dobrze zdefiniowane, tzn. rozwiązanie istnieje i jest wyznaczone jednoznacznie. Zauważmy, że wielomian interpolacyjny wf jako taki nie może być wynikiem obliczeń w naszym modelu obliczeniowym, możemy natomiast wyznaczyć jego współczynniki cj w wybranej bazie.

Definicja

Niech (φj)j=0n będzie bazą w przestrzeni Πn wielomianów stopnia co najwyżej n. Zadanie interpolacji wielomianowej polega na obliczeniu dla danej funkcji f współ\-czyn\-ni\-ków cj takich, że wielomian

wf()=j=0ncjφj()

interpoluje f w punktach xj, 0jn.

Uwarunkowanie

Danymi w zadaniu interpolacji są zarówno wartości interpolowanej funkcji, jak i węzły interpolacji. Traktując węzły jako sztywno zadane parametry zadania i dopuszczając jedynie zaburzenia wartości funkcji, można pokazać, że jeśli zamiast f rozpatrzyć jej zaburzenie f+Δf, gdzie |Δf|ϵ, to

|wf(x)wf+Δf(x)|cond(x,f)|wf(x)|ϵ,

gdzie

cond(x,f)=j=0n|lj(x)f(xj)||pn(x)|1.

Wybór bazy wielomianowej

Jak już wiemy, zadanie interpolacji Lagrange'a sprowadza się do rozwiązania układu równań liniowych. Okazuje się, że w zależności od wyboru sposobu reprezentacji naszego wielomianu (czyli od wyboru bazy wielomianowej (φj)j=0n), układ ten może być albo bardzo łatwy do rozwiązania, albo --- bardzo trudny. Co więcej, jego rozwiązanie w arytmetyce flν może napotykać na większe bądź mniejsze trudności (w zależności np. od uwarunkowania macierzy układu, który musimy rozwiązać).

W naturalny sposób powstaje więc problem wyboru "wygodnej" bazy w Πn. Rozpatrzymy trzy bazy: Lagrange'a, potęgową i Newtona.

Baza Lagrange'a (kanoniczna)

Zdefiniujmy dla 0jn wielomiany

lj(x)=(xx0)(xx1)(xxj1)(xxj+1)(xxn)(xjx0)(xjx1)(xjxj1)(xjxj+1)(xjxn).

Zauważmy, że każdy z lj jest stopnia dokładnie n oraz

lj(xi)={0ij,1i=j.

Stąd łatwo widać, że wielomiany te stanowią bazę w Πn, którą nazywamy bazą Lagrange'a. Macierz układu zadania interpolacji jest w takim wypadku identycznością i w konsekwencji cj=f(xj), j. Wielomian interpolacyjny dla funkcji f można więc zapisać jako

wf()=j=0nf(xj)lj().

Koszt kombinatoryczny rozwiązania zadania interpolacji jest przy tym zerowy.

Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu interpolacyjnego wf w punkcie x różnym od xj, 0jn. Podstawiając

wj=1(xjx0)(xjx1)(xjxj1)(xjxj+1)(xjxn)

oraz pn(x)=(xx0)(xxn) mamy pierwszy wzór barycentryczny

wf(x)=pn(x)j=0nwjf(xj)xxj,

i ostatecznie dostajemy tzw. drugi wzór barycentryczny na wielomian interpolacyjny,

wf(x)=j=0nqj(x)f(xj)j=0nqj(x),

gdzie qj(x)=wj/(xxj). W ostatniej równości wykorzystaliśmy fakt, że pn(x)(j=0nqj(x))1, co łatwo widzieć, rozpatrując zadanie interpolacji funkcji f1. Drugi wzór barycentryczny jest korzystniejszy w implementacji.

Dla wielu układów węzłów wagi wj są zadane jawnymi wzorami, np. dla węzłów równoodległych (niezależnie od tego, na jakim odcinku!) wagi w drugim wzorze barycentrycznym wynoszą po prostu

wj=(1)j(nj).

Również dla Dodaj link: węzłów Czebyszewa istnieją eleganckie wzory na takie współczynnki.

Można pokazać, że wartość wf(x)~ wielomianu iterpolacyjnego obliczona w arytmetyce flν według pierwszego algorytmu barycentrycznego spełnia

wf(x)~=pn(x)j=0nwjxxjf(xj)(1+ϵj),

gdzie |ϵj|5(n+1), a więc jest to algorytm numerycznie poprawny. Zachowanie drugiej postaci wzoru barycentrycznego w arytmetyce flν jest nieco bardziej skomplikowane, ale w typowych zadaniach .

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)=xj, j. Jeśli bowiem

wf(x)=a0+a1x++anxn,

to również

wf(x)=((anx+an1)x+an2)x++a1)x+a0,

co sugeruje zastosowanie następującego schematu Hornera do obliczenia wf(x):

Algorytm Algorytm Hornera



<math>\displaystyle v_n = a_n;</math>
for (j=n-1; j >= 0 ; j--)
	<math>\displaystyle v_j\, = \,v_{j+1}\cdot x\,+\,a_j</math>;

Po wykonaniu tego algorytmu wf(x)=v0. Schemat Hornera wymaga wykonania tylko n mnożeń i n dodawań. Ma on również głębszy sens, bo jego produktem ubocznym mogą być także wartości pochodnych naszego wielomianu w x. Algorytm Hornera okazuje się optymalny. Każdy inny algorytm obliczający dokładną wartość wielomianu znając jego współczynniki wymaga wykonania co najmniej n mnożeń i n dodawań. Algorytm Hornera jest też numerycznie poprawny.

Zauważmy jednak, że w przypadku bazy potęgowej macierz (xij)i,j=0n układu zadania interpolacji jest pełna. Jest to tzw. macierz Vandermonde'a. Obliczenie współczynników wielomianu interpolacyjnego w bazie potęgowej bezpośrednio z tego układu, stosując jedną ze znanych nam już metod, kosztowałoby rzędu n3 operacji arytmetycznych. Co gorsza, w często spotykanym przypadku, gdy węzły interpolacji są równoodległe, ta macierz jest bardzo źle uwarunkowana!

Baza Newtona

Rozwiązaniem pośrednim, które łączy prostotę obliczenia współczynników z prostotą obliczenia wartości wf(x) i ewentualnie jego pochodnych jest wybór bazy Newtona,

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned p_0(x) &= 1, \\ p_j(x) &= (x-x_0)(x-x_1)\cdots(x-x_{j-1}),\qquad 1\le j\le n. \endaligned}

W tym przypadku współczynniki rozwinięcia wielomianu interpolacyjnego będziemy oznaczać przez bj,

wf=j=0nbjpj.

Zwróćmy od razu uwagę na ważną własność bazy Newtona. Jeśli wf,jΠj jest wielomianem interpolacyjnym dla funkcji f opartym na węzłach x0,x1,,xj, 0jn, to wf,0=b0 oraz

wf,j=wf,j1+bjpj,1jn.

Wartość wf(x) można obliczyć stosując prostą modyfikację algorytmu Hornera:

Algorytm Algorytm Hornera dla bazy Newtona



<math>\displaystyle v_n = b_n;</math>
for (j=n-1; j >= 0 ; j--)
	<math>\displaystyle v_j\, = \,v_{j+1}\cdot (x-x_j)\,+\,b_j</math>;

Ponadto układ równań zadania interpolacji jest trójkątny dolny, o specyficznej strukturze, dzięki czemu można stworzyć elegancki algorytm, który teraz przedstawimy.

Algorytm różnic dzielonych

Różnicę dzieloną funkcji f opartą na różnych węzłach t0,t1,,ts, gdzie s1, definiuje się indukcyjnie jako

f(t0,t1,,ts)=f(t1,t2,,ts)f(t0,t1,,ts1)tst0.

Zachodzi następujące ważne twierdzenie.

Twierdzenie O różnicach dzielonych

Współczynniki bj wielomianu interpolacyjnego Newtona dla danej funkcji f dane są przez różnice dzielone f w węzłach x0,x1,,xj, tzn.

bj=f(x0,x1,,xj),0jn.

Dowód

Dla 0ijn, oznaczmy przez wi,j wielomian z Πji interpolujący f w węzłach xi,xi+1,,xj. Wtedy ma miejsce następująca równość (i<j):

wi,j(x)=(xxi)wi+1,j(x)(xxj)wi,j1(x)xjxi,x.

Aby ją pokazać wystarczy, że prawa strona tej równości, którą oznaczymy przez v(x), przyjmuje wartości f(xs) dla x=xs, isj. Rzeczywiście, jeśli i+1sj1 to

v(xs)=(xsxi)f(xs)(xsxj)f(xs)xjxi=f(xs).

Ponadto

v(xi)=(xixj)xjxif(xi)=f(xi),

oraz podobnie v(xj)=f(xj). Stąd v jest wielominem z Πji interpolującym f w węzłach xs, isj, czyli wi,j=v.

Dalej postępujemy indukcyjnie ze względu na stopień n wielomianu interpolacyjnego. Dla n=0 mamy oczywiście b0=f(x0). Niech n1. Ponieważ, jak łatwo zauważyć,

w0,n(x)=w0,n1(x)+bnpn(x),

z założenia indukcyjnego mamy bj=f(x0,,xj) dla 0jn1. Aby pokazać podobną równość dla bn, zauważmy, że

w0,n(x)=(xx0)w1,n(x)(xxn)w0,n1(x)xnx0.

Zauważmy teraz, że bn jest współczynnikiem przy xn w wielomianie w0,n. Z założenia indukcyjnego wynika, że współczynniki przy xn1 w wielomianach w1,n i w0,n1 są ilorazami różnicowymi opartymi odpowiednio na węzłach x1,,xn i x0,,xn1. Stąd

bn=f(x1,,xn)f(x0,,xn1)xnx0=f(x0,x1,,xn),

co kończy dowód.

Różnicę dzieloną f(x0,x1,,xn) można łatwo obliczyć na podstawie wartości f(xj), 0jn, budując następującą tabelkę:

x0f(x0)x1f(x1)f(x0,x1)x2f(x2)f(x1,x2)f(x0,x1,x2)xnf(xn)f(xn1,xn)f(xn2,xn1,xn)f(x0,x1,,xn).
<flash>file=Interpolacja.swf</flash><div.thumbcaption>Wyznaczenie wielomianu w, interpolującego zestaw punktów (0,2)(1,5)(1,7) algorytmem różnic dzielonych

Zauważmy przy tym, że "po drodze" obliczamy f(xi,xi+1,,xj) dla wszystkich 0i<jn, a więc w szczególności również interesujące nas różnice dzielone f(x0,x1,,xj). Stąd i z Twierdzenia o różnicach dzielonych natychmiast wynika algorytm obliczania współczynników bj wielomianu interpolacyjnego w bazie Newtona. Po wykonaniu następującego algorytmu,

Algorytm Metoda różnic dzielonych



for (j = 0; j <= n; j++)
	<math>\displaystyle b_j</math> = <math>\displaystyle f(x_j)</math>; 
for (j = 0; j <= n; j++)
	for (k = n; k >= j; k--)
		<math>\displaystyle b_j</math> = <math>\displaystyle (b_k-b_{k-1})/(x_k - x_{k-j})</math>;

współczynniki bj na końcu algorytmu zawierają wspólczynniki wielomianu interpolacyjnego w bazie Newtona. Czy gdybyś zobaczył ten algorytm na samym początku tego wykładu, to zgadłbyś, do czego może służyć?!

<flash>file=Interpolacjainsitu.swf</flash><div.thumbcaption>Wyznaczenie tego samego wielomianu w, interpolującego zestaw punktów (0,2)(1,5)(1,7) algorytmem różnic dzielonych --- wykonanym in situ.

Okazuje się, że przy realizacji w flν algorytmu różnic dzielonych istotną rolę odgrywa porządek węzłów. Można pokazać, że algorytm liczenia f(t0,,tn) jest numerycznie poprawny ze względu na dane interpolacyjne f(i)(tj), o ile węzły są uporządkowane nierosnąco lub niemalejąco.

Przypadek węzłów wielokrotnych

Uogólnieniem rozpatrzonego zadania interpolacji jest zadanie interpolacji Hermite'a. Zakładamy, że oprócz (różnych) węzłów xj dane są również ich krotności nj, 0jk, przy czym j=0knj=n+1. Należy skonstruować wielomian wfΠn taki, że

wf(i)(xj)=f(i)(xj) dla 0inj1,0jk.

Oczywiście zakładamy przy tym, że odpowiednie pochodne funkcji f istnieją.

Lemat

Zadanie interpolacji Hermite'a ma jednoznaczne rozwiązanie.

Plik:Hermite.jpg
Hermite
Zobacz biografię

Dowód

Istnienie i jednoznaczność rozwiązania można uzasadnić tak samo jak w przypadku węzłów jednokrotnych. Przedstawiając wielomian w dowolnej bazie otrzymujemy układ n+1 równań z n+1 niewiadomymi, który dla zerowej prawej strony ma jedynie rozwiązanie zerowe. Inaczej bowiem istniałby wielomian niezerowy stopnia nie większego niż n, który miałby zera o łącznej krotności większej niż n.

Nas oczywiście interesuje konstrukcja wielomianu wf. W tym celu ustawimy węzły xj w ciąg

(x¯0,x¯1,,x¯n)=(x0,,x0n0,x1,,x1n1,,xk,,xknk)

i zdefiniujemy uogólnioną bazę Newtona w Πn jako

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned p_0(x) &= 1, \\ p_j(x) &= (x-\bar x_0)(x-\bar x_1)\cdots (x-\bar x_{j-1}), \qquad 1\le j\le n. \endaligned}

Uogólnimy również pojęcie różnicy dzielonej na węzły powtarzające się kładąc

f(x¯i,x¯i+1,,x¯j)=f(ji)(x¯i)(ji)!

dla x¯i=x¯i+1==x¯j, oraz

f(x¯i,x¯i+1,,x¯j)=f(x¯i+1,,x¯j)f(x¯i,,xj1)x¯jx¯i

dla x¯ix¯j. Zauważmy, że przy tej definicji różnice f(x¯i,,x¯j) możemy łatwo obliczyć stosując schemat podobny do tego z przypadku węzłów jednokrotnych.

Twierdzenie

Współczynniki bj wielomianu interpolacyjnego Hermite'a w bazie Newtona,

wf()=j=0nbjpj(),

dane są przez odpowiednie różnice dzielone, tzn.

bj=f(x¯0,x¯1,,x¯j),0jn.

Dowód

Dowód przeprowadzimy podobnie jak dla węzłów jednokrotnych. Niech wi,jΠji oznacza wielomian interpolacyjny Hermite'a oparty na (być może powtarzających się) węzłach x¯i,x¯i+1,,x¯j. To znaczy, wi,j interpoluje f w węzłach xs takich, że xs występuje w ciągu x¯i,x¯j, a jego krotność jest liczbą powtórzeń xs w tym ciągu.

Zauważmy najpierw, że dla x¯ix¯j zachodzi znany nam już wzór,

wi,j(x)=(xx¯i)wi+1,j(x)(xx¯j)wi,j1(x)x¯jx¯i.

Rzeczywiście, oznaczmy przez v(x) prawą stronę powyższej równości. Dla k mniejszego od krotności danego węzła xs w ciągu x¯i,x¯j, mamy wi+1,j(k1)(xs)=wi,j1(k1)(xs), a ponieważ

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned v^{(k)}(x)&=\frac{k\,(w_{i+1,j}^{(k-1)}(x)-w_{i,j-1}^{(k-1)}(x))} {\bar x_j-\bar x_i} \\ && \qquad +\, \frac{(x-\bar x_i)w_{i+1,j}^{(k)}(x)-(x-\bar x_j)w_{i,j-1}^{(k)}(x)} {\bar x_j-\bar x_i}, \endaligned}

to

v(k)(xs)=(xsx¯i)wi+1,j(k)(xs)(xsx¯j)wi,j1(k)(xs)x¯jx¯i.

Korzystając z tego wzoru sprawdzamy, że v spełnia odpowiednie warunki interpolacyjne, a stąd wi,j=v.

Dalej postępujemy indukcyjnie ze względu na n. Dla n=0 mamy b0=f(x0). Dla n1 wystarczy pokazać, że bn=f(x¯0,x¯1,,x¯n). W tym celu rozpatrzymy dwa przypadki.

Jeśli x¯0=x¯n to mamy jeden węzeł x0 o krotności n+1. Wielomian interpolacyjny jest wtedy postaci

wf(x)=j=0nf(j)(x0)j!(xx0)j,

a stąd bn=f(n)(x0)//(n!)=f(x0,,x0n+1). Jeśli zaś x¯0x¯j to równość bn=f(x¯0,x¯1,,x¯n) wynika z wcześniej wyprowadzonych wzorów oraz z założenia indukcyjnego.

Uwaga

Zauważmy, ze pojęcie różnicy dzielonej formalnie zdefiniowaliśmy jedynie dla ciągu węzłów postaci x0,,x0,x1,,x1,,xk,,xk, gdzie xj są parami różne. Tą definicję można rozszerzyć do dowolnego ciągu węzłów. Można bowiem powiedzieć, że f(t0,t1,,tn) jest współczynnikiem przy xn wielomianu wt0,,tnΠn interpolującego f w węzłach tj (uwzględniając krotności). Równoważnie,

f(t0,t1,,tn)=wt0,,tn(n)n!.

Błąd interpolacji

Gdy mamy do czynienia z funkcją, która jest "skomplikowana" to często dobrze jest zastąpić ją funkcją "prostszą". Mówimy wtedy o aproksymacji (przybliżaniu) funkcji. Funkcję musimy również aproksymać wtedy, gdy nie jesteśmy w stanie uzyskać pełnej o niej informacji. Na przykład, gdy funkcja reprezentuje pewien proces fizyczny to często zdarza się, że dysponujemy jedynie ciągiem próbek, czyli wartościami tej funkcji w pewnych punktach. Jasne jest, że chcielibyśmy przy tym, aby błąd aproksymacji był możliwie mały.

Z tego punktu widzenia, intepolacja wielomianowa może być traktowana jako jeden ze sposobów aproksymacji funkcji, opartym na próbkowaniu. Naturalnym staje się więc pytanie o błąd takiej aproksymacji.

Niech x0,x1,,xn będą (niekoniecznie różnymi) węzłami należącymi do pewnego (być może nieskończonego) przedziału Parser nie mógł rozpoznać (nieznana funkcja „\subsetR”): {\displaystyle \displaystyle D\subsetR} . Dla danej funkcji Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle f:D\toR} , przez wf rozważamy, tak jak w całym wykładzie, wielomian interpolacyjny stopnia co najwyżej n interpolujący f w zadanych węzłach. W przypadku węzłów wielokrotnych jest to oczywiście wielomian interpolacyjny Hermite'a; gdy węzły są jednokrotne, mamy do czynienia z interpolacją Lagrange'a.

Lemat Postać błędu interpolacji

Dla dowolnego punktu x¯D błąd interpolacji w x¯ wyraża się wzorem

f(x¯)wf(x¯)=(x¯x0)(x¯x1)(x¯xn)f(x0,x1,,xn,x¯).

Jeśli ponadto fC(n+1)(D), czyli pochodna f(n+1) w D istnieje i jest ciągła, to

f(x¯)wf(x¯)=(x¯x0)(x¯x1)(x¯xn)f(n+1)(ξ)(n+1)!,

gdzie ξ=ξ(x¯) jest pewnym punktem należącym do najmniejszego przedziału zawierającego punkty x0,x1,,xn,x¯.

Dowód

Możemy założyć, że x¯ nie jest żadnym z węzłów xj, 0jn. Niech w¯fΠn+1 będzie wielomianem interpolacyjnym funkcji f opartym na węzłach x0,,xn i dodatkowo na węźle x¯. Mamy wtedy

w¯f(x)=wf(x)+(xx0)(xx1)(xxn)f(x0,x1,,xn,x¯),

a ponieważ z warunku interpolacyjnego f(x¯)=w¯f(x¯), to mamy też pierwszą równość w lemacie.

Aby pokazać drugą część lematu, rozpatrzmy funkcję Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle \psi:D\toR} ,

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \lefteqn{\psi(x) \;=\; f(x)-\bar w_f(x)} \\ &= \, f(x)-w_f(x)-(x-x_0)(x-x_1)\cdots(x-x_n) f(x_0,\ldots,x_n,\bar x). \endaligned}

Z warunków interpolacyjnych na w¯fΠn+1 wynika, że funkcja ψ ma punkty zerowe o łącznej krotności co najmniej n+2. Wykorzystując twierdzenie Rolle'a wnioskujemy stąd, że ψ ma zera o łącznej krotności co najmniej n+1, ψ ma zera o łącznej krotności co najmniej n, itd. W końcu funkcja ψ(n+1) zeruje się w co najmniej jednym punkcie ξ=ξ(x¯) należącym do najmniejszego przedziału zawierającego x0,x1,,xn,x¯. Wobec tego, że wf(n+1)0, a (n+1)-sza pochodna wielomianu (xx0)(xxn) wynosi (n+1)!, mamy

0=ψ(n+1)(ξ)=f(n+1)(ξ)(n+1)!f(x0,,xn,x¯).

Stąd

f(x0,x1,,xn,x¯)=f(n+1)(ξ)(n+1)!,
co kończy dowód.

Zwykle interesuje nas nie tyle błąd w ustalonym punkcie x¯D, ale na całym przedziale D. Zakładając teraz, że przedział D jest domknięty, czyli

D=[a,b]

dla pewnych <a<b<+, błąd ten będziemy mierzyć w normie jednostajnej (Czebyszewa). Dla funkcji ciągłej Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle g:[a,b]\toR} , norma ta jest zdefiniowana jako

gC([a,b])=maxxD|g(x)|.

Niech FMr([a,b]), gdzie r0, będzie klasą funkcji

FMr([a,b])={fC(r+1)([a,b]):f(r+1)C([a,b])M},

gdzie 0<M<. Mamy następujące twiedzenie.

Twierdzenie

Załóżmy, że każdą funkcję fFMr([a,b]) aproksymujemy jej wielomianem interpolacyjnym wfΠr opartym na r+1 węzłach x0,,xr[a,b]. Wtedy maksymalny błąd takiej aproksymacji wynosi

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned e(F^r_M([a,b]);x_0,x_1,\ldots,x_r) &= \max_{f\in F^r_M([a,b])} \|f-w_f\|_{ C([a,b])} \\ &= \frac M{(r+1)!}\cdot \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|. \endaligned}

Dowód

Oszacowanie górne wynika bezpośrednio z Lematu o postaci błędu interpolacji, bowiem dla fFMr([a,b]) mamy

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \|f-w_f\|_{ C([a,b])}&=\max_{a\le x\le b}|f(x)-w_f(x)| \\ &= \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)| \frac{|f^{(r+1)}(\xi(x))|}{(r+1)!} \\ &\le & \frac{M}{(r+1)!}\max_{x\in D}|(x-x_0)\cdots(x-x_r)|. \endaligned}

Z drugiej strony zauważmy, że dla wielomianu v(x)=Mxr+1//(r+1)! mamy vFMr([a,b]) oraz

vwvC([a,b])=M(r+1)!maxaxb|(xx0)(xxr)|,
co kończy dowód.

Przykład: Zjawisko Rungego

Rozważmy zadanie interpolacji funkcji

f(x)=11+x2

w N równoodległych węzłach na przedziale [5,5]. Okazuje się, że dla dużych wartości N, wielomian interpolacyjny ma poważne kłopoty z aproksymacją tej funkcji przy krańcach przedziału:

[[Image:MNrunge17rowno.png|thumb|450px|center|Zjawisko Rungego: interpolacja w N=17 węzłach równoodległych dla Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle f(x) = \frac{1}{1+x^2}]] Z kolei wielomian oparty na węzłach Czebyszewa znacznie lepiej przybliża tę funkcję. \rysunek{runge17rownoczeby.png}{Zjawisko Rungego: interpolacja w węzłach równoodległych, kontra interpolacja w węzłach Czebyszewa} Rzeczywiście, węzły Czebyszewa zagęszczają się w pobliżu krańców odcinka. \rysunek{runge17czeby.png}{Zjawisko Rungego: interpolacja w węzłach Czebyszewa} </div></div> Zauważmy, że błąd aproksymacji } e(F^r_M([a,b]);x_0,...,x_r)Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle w istotny sposób zależy od wyboru węzłów } x_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Naturalne jest więc teraz następujące pytanie. W których punktach } x_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle przedziału } [a,b]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle należy obliczać wartości funkcji, aby błąd był minimalny? Problem ten sprowadza się oczywiście do minimalizacji wielkości } \max_{a\le x\le b}\PIPEREAD (x-x_0)\cdots(x-x_r)\PIPEREAD Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle względem węzłów } x_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . {{twierdzenie|O ''optymalnym'' doborze węzłów|| Błąd aproksymacji w klasie funkcji } F^r_M([a,b])(x_0,\cdots,x_r)Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest minimalny gdy węzły interpolacji są zadane jako \emph{węzły Czebyszewa} na } (a,b),tzn.

x_j^*\,=\,\frac{b-a}2\cdot

        \cos\left(\frac{2j+1}{2r+2}\pi\right)\,+\,
          \frac{a+b}2,\qquad 0\le j\le r.
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Ponadto, dla optymalnych węzłów } x_j^*mamy

e(F_M^r([a,b]);x_0^*,...,x_r^*)\,=\,

   \frac{2M}{(r+1)!}\left(\frac{b-a}4\right)^{r+1}.
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle }} Dowód tego twierdzenia opiera się na własnościach pewnego ważnego ciągu wielomianów, który teraz przedstawimy. ==Wielomiany Czebyszewa== Ciąg } \{T_k\}_{k\ge 0}Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle \emph{wielomianów Czebyszewa} (pierwszego rodzaju) zdefiniowany jest indukcyjnie jako }

\aligned T_0(x) &= 1,

   T_1(x) &= x, 
T_{k+1}(x) &= 2xT_k(x)-T_{k-1}(x),\qquad \mbox{ dla }\quad k\ge 1.
\endaligned
Parser nie mógł rozpoznać (nieznana funkcja „\biografia”): {\displaystyle \displaystyle \biografia{}{Czebyszew}{} Zauważmy, że } T_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest wielomianem stopnia dokładnie } kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle o współczynniku przy } x^kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle równym } 2^{k-1}(k\ge 1).PonadtowielomianT_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle można dla } \PIPEREAD x\PIPEREAD \le 1Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle przedstawić w postaci }
 T_k(x)\,=\,\cos(k\arccos x).
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Rzeczywiście, łatwo sprawdzić, że jest to prawdą dla } k=0,1Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Stosując podstawienie } \cos t=x,0\le t\le\piParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle , oraz wzór na sumę cosinusów otrzymujemy dla } k\ge 1

\cos((k+1)t)\,=\,2\cdot\cos t\cos(kt)\,-\,\cos((k-1)t),

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle co jest równoważne formule rekurencyjnej dla } T_{k+1}Parser nie mógł rozpoznać (nieznana funkcja „\rysunek”): {\displaystyle \displaystyle . \rysunek{czebyszew.png}{Kilka pierwszych wielomianów Czebyszewa na odcinku } [-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle } Ze wzoru } T_k(x) = \cos(k\arccos x)Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle wynikają również inne ważne własności wielomianów Czebyszewa. Norma wielomianu Czebyszewa na } [-1,1]wynosi

\|T_k\|_{ C([-1,1])}\,=\,\max_{-1\le x\le 1} \PIPEREAD T_k(x)\PIPEREAD

    \,=\,1 
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle i jest osiągana w } k+1Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle punktach tego przedziału równych }
 y_j\,=\,\cos\Big(\frac jk\pi\Big),\qquad 0\le j\le k,
przyczymT_k(y_j)=(-1)^jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . W końcu, } ktywielomianCzebyszewaT_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ma dokładnie } kpojedynczychzerw[-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle równych }

z_j\,=\,\cos\Big(\frac{2j+1}{2r}\pi\Big),

     \qquad 0\le j\le k-1.
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Konsekwencją wymienionych własności jest następująca własność ekstremalna wielomianów Czebyszewa. Przez } \overline{\Pi}_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle oznaczymy klasę wielomianów stopnia } kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle o współczynniku wiodącym równym } 1,tzn.

\overline{\Pi}_k\,=\,\{\,w\in\Pi_k:\,

    w(x)=x^k+\cdots\,\}.
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle {{twierdzenie|o minimaksie|| Niech } k\ge 1.Wklasie\overline{\Pi}_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle minimalną normę jednostajną na przedziale } [-1,1]mawielomianw^*=2^{1-k}T_k,tzn.

\min_{w\in\overline{\Pi}_k}\|w\|_{C([-1,1])}\,=\,

        \|w^*\|_{C([-1,1])}\,=\,\frac 1{2^{k-1}}.
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle }} \rysunek{czebyszewkontrarownoodlegle.png}{Wielomian stopnia 9 oparty na węzłach Czebyszewa kontra oparty na węzłach równoodległych. Zwróć uwagę na wielkie oscylacje tego drugiego pry końcach odcinka.} <!-- {{dowod||| Zauważmy najpierw, że } w^*\in\overline\Pi_koraz\|w^*\|_{C([-1,1])}=2^{1-k}Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Wystarczy więc pokazać, że norma każdego wielomianu z } \overline\Pi_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest nie mniejsza niż } 2^{1-k}Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Załóżmy, że jest przeciwnie, tzn. istnieje wielomian } w\in\overline\Pi_kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle taki, że }

\|w\|_{C([-1,1])}\,<\,\frac 1{2^{k-1}}\,=\,

         \|w^*\|_{C([-1,1])}. 
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Rozpatrzmy funkcję } \psi=w^*-wParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Ponieważ dla punktów ``maksymalnych'' zdefiniowanych w ([[##maxmm|Uzupelnic: maxmm ]]) mamy } w^*(y_{k-j})=(-1)^j2^{1-k}oraz\PIPEREAD w(y_{k-j})\PIPEREAD <2^{1-k},to

\psi(y_{k-j})\,\left\{\,\beginarray {ll}

     > 0 &\quad j\mbox{-parzyste}, 
< 0 &\quad j\mbox{-nieparzyste}. \endarray \right.
0\le j\le kParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Stąd } \psiParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ma co najmniej jedno zero w każdym z przedziałów } (y_i,y_{i+1})dla0\le i\le k-1,czyliwsumiekzer.Zdrugiejstrony,\psiParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest wielomianem stopnia co najwyżej } k-1Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle (bo współczynniki przy } x^kwwielomianachw^*iwParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle redukują się), a więc } \psi=0iw^*=wParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . }} --> Miejsca zerowe wielomianu Czebyszewa będziemy nazywać \emph{węzłami Czebyszewa}. {{dowod|Twierdzenia o optymalnym doborze węzłów|| Dowód wynika teraz bezpośrednio z twierdzenia o minimaksie. Zauważmy bowiem, że wielomian } (x-x_0)(x-x_1)\cdots(x-x_r)jestwklasie\overline\Pi_{r+1}Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Stąd dla } [a,b]=[-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle optymalnymi węzłami są zera } z_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle wielomianu Czebyszewa, przy których }

(x-z_0)(x-z_1)\cdots(x-z_r)\,=\,\frac{T_{r+1}(x)}{2^r}.

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Jeśli przedział } [a,b]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest inny niż } [-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle , należy dokonać liniowej zamiany zmiennych tak, aby przeszedł on na } [-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle . Bezpośrednie sprawdzenie pokazuje, że w klasie } \overline\Pi_{r+1}Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle minimalną normę Czebyszewa na przedziale } [a,b]mawielomian

w_{a,b}^*(x)\,=\,\Big(\frac{b-a}{2}\Big)^{r+1}

       w^*\left(\frac{2x-(a+b)}{b-a}\right).
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Stąd }

\|w_{a,b}^*\|_{C([a,b])}\,=\,\Big(\frac{b-a}{2}\Big)^{r+1}

   \frac 1{2^r}\,=\,2\,\Big(\frac{b-a}{4}\Big)^{r+1}  
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle i węzły } x^*_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle są optymalne.}} Wielomiany Czebyszewa znajdują bardzo wiele, czasem zaskakujących, zastosowań w różnych działach numeryki, m.in. w konstrukcji metod iteracyjnych rozwiązywania równań liniowych. Równie interesujący jest fakt, że wielomian interpolacyjny oparty na węzłach Czebyszewa jest prawie optymalnym przybliżeniem wielomianowym zadanej funkcji: {{twierdzenie|Jacksona|| Dla } f\in C[-1,1]Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle dostatecznie gładkiej, wielomian interpolacyjny } w_fParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle stopnia co najwyżej } nParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle , oparty na węzłach Czebyszewa, spełnia }

\PIPEREAD \PIPEREAD f-w_f\PIPEREAD \PIPEREAD _{C[-1,1]} \leq \left(2+\frac{2}{\pi}\log(n+1)\right) \PIPEREAD \PIPEREAD f-w_f^*\PIPEREAD \PIPEREAD _{C[-1,1]}

gdziew_f^*Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle jest wielomianem stopnia co najwyżej } nParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle , najlepiej aproksymującym } fParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle w sensie normy jednostajnej. }} <!-- {{dowod||| Niech } x_jParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle będą węzłami Czebyszewa. W oczywisty sposób, }

\PIPEREAD \PIPEREAD f-w_f\PIPEREAD \PIPEREAD = \PIPEREAD \PIPEREAD f-w_f^* + w_f^* - w_f\PIPEREAD \PIPEREAD \leq \PIPEREAD \PIPEREAD f-w_f^*\PIPEREAD \PIPEREAD + \PIPEREAD \PIPEREAD w_f^* - w_f\PIPEREAD \PIPEREAD

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Ponieważ } w_f^* = \sum_j l_j(\cdot) w_f^*(x_j)(dlaczego?),to

\PIPEREAD \PIPEREAD w_f^* - w_f\PIPEREAD \PIPEREAD = \PIPEREAD \PIPEREAD \sum_j l_j(\cdot) (w_f^*(x_j)-f(x_j))\PIPEREAD \PIPEREAD \leq \PIPEREAD \PIPEREAD \sum_j \PIPEREAD l_j\PIPEREAD \PIPEREAD \PIPEREAD \cdot \PIPEREAD \PIPEREAD f-w_f^*\PIPEREAD \PIPEREAD .

Tymczasem,\PIPEREAD \PIPEREAD \sum_j \PIPEREAD l_j\PIPEREAD \PIPEREAD \PIPEREAD Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle (tak zwana stała Lebesque'a) dla węzłów Czebyszewa ma oszacowanie \cite{Rivlin}, \cite{Higham-Barycentric} }

\PIPEREAD \PIPEREAD \sum_j \PIPEREAD l_j\PIPEREAD \PIPEREAD \PIPEREAD \leq \frac{2}{\pi} \log(n+1) + 1.

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle Jako ciekawostkę dodajmy, że dla węzłów równoodległych na } [-1,1]mamyjedynie

\PIPEREAD \PIPEREAD \sum_j \PIPEREAD l_j\PIPEREAD \PIPEREAD \PIPEREAD \leq \frac{2^n}{n\log n},

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle co jeszcze raz potwierdza, że węzły równoodległe zasadniczo nie gwarantują dobrej aproksymacji funkcji w normie jednostajnej. }} --> A więc, jeśli } n \leq 5Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle to wielomian oparty na węzłach Czebyszewa jest co najwyżej 3.02 razy, a gdy } n \leq 20Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle --- maksymalnie 4 razy gorszy od optymalnego. Można więc powiedzieć, że jest \textit{prawie optymalny}.}