MN09: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 20 wersji utworzonych przez 2 użytkowników) | |||
Linia 19: | Linia 19: | ||
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. | 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. | ||
[[Image:MNinterpolacja.png|thumb|550px|center|Wielomian <math> | [[Image:MNinterpolacja.png|thumb|550px|center|Wielomian <math>w</math> (czerwony) stopnia 6, interpolujący 7 zadanych wartości (zaznaczone na zielono) danej funkcji <math>f</math>]] | ||
Niech <math> | Niech <math>D\subset R</math> i niech <math>F</math> będzie pewnym zbiorem funkcji | ||
<math> | <math>f:D \to R</math>. Niech <math>x_0,x_1,\ldots,x_n</math> będzie ustalonym zbiorem | ||
parami różnych punktów z <math> | parami różnych punktów z <math>D</math>, zwanych później <strong>węzłami</strong>. | ||
Powiemy, że wielomian <math> | Powiemy, że wielomian <math>w</math> <strong>interpoluje</strong> funkcję <math>f \in F</math> | ||
w węzłach <math> | w węzłach <math>x_j</math>, gdy | ||
<center><math> | <center><math>w(x_j)\,=\,f(x_j),\qquad 0\le j\le n | ||
</math></center> | </math></center> | ||
Oznaczmy przez <math> | Oznaczmy przez <math>\Pi_n</math> przestrzeń liniową wielomianów stopnia | ||
co najwyżej <math> | co najwyżej <math>n</math> o współczynnikach rzeczywistych, | ||
<center><math> | <center><math>\Pi_n\,=\,\{\,w(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0:; | ||
a_j\ | a_j \in R, 0\le j\le n\,\} | ||
</math></center> | </math></center> | ||
Linia 43: | Linia 43: | ||
{{twierdzenie|o istnieniu i jednoznaczności zadania interpolacji Lagrange'a|o istnieniu i jednoznaczności zadania interpolacji Lagrange'a| | {{twierdzenie|o istnieniu i jednoznaczności zadania interpolacji Lagrange'a|o istnieniu i jednoznaczności zadania interpolacji Lagrange'a| | ||
Dla dowolnej funkcji <math> | Dla dowolnej funkcji <math>f:D \to R</math> istnieje | ||
dokładnie jeden wielomian <math> | dokładnie jeden wielomian <math>w_f\in\Pi_n</math> interpolujący <math>f</math> | ||
w węzłach <math> | w węzłach <math>x_j</math>, <math>0\le j\le n</math>. | ||
}} | }} | ||
{{dowod||| | {{dowod||| | ||
Wybierzmy w <math> | Wybierzmy w <math>\Pi_n</math> dowolną bazę wielomianów | ||
<math> | <math>\varphi_j</math>, <math>0\le j\le n</math>, | ||
<center><math> | <center><math>\Pi_n\,=\, \mbox{span} \{\,\varphi_0,\varphi_1,\ldots,\varphi_n\,\}</math></center> | ||
</math></center> | |||
Wtedy każdy wielomian z <math> | Wtedy każdy wielomian z <math>\Pi_n</math> można jednoznacznie przedstawić | ||
w postaci rozwinięcia względem wybranej bazy. Warunkiem koniecznym | w postaci rozwinięcia względem wybranej bazy. Warunkiem koniecznym | ||
i dostatecznym na to, aby wielomian | i dostatecznym na to, aby wielomian | ||
<math> | <math>w_f(\cdot)=\sum_{j=0}^n c_j\varphi_j(\cdot)</math> | ||
interpolował <math> | interpolował <math>f</math> jest spełnienie układu <math>n+1</math> równań liniowych | ||
<center><math> | <center><math>\sum_{j=0}^n c_j\varphi_j(x_i)\,=\,f(x_i),\qquad 0\le i\le n</math>,</center> | ||
</math></center> | |||
z <math> | z <math>n+1</math> niewiadomymi <math>c_j</math>, który w postaci macierzowej wygląda | ||
następująco: | następująco: | ||
<center><math> | <center><math> | ||
\left(\begin{array} {cccc} | \left(\begin{array} {cccc} | ||
\varphi_0(x_0) & \varphi_1(x_0) & \cdots & \varphi_n(x_0) \\ | \varphi_0(x_0) & \varphi_1(x_0) & \cdots & \varphi_n(x_0) \\ | ||
Linia 76: | Linia 74: | ||
c_0 \\ c_1 \\ \vdots \\ c_n \end{array} \right)\,=\, | c_0 \\ c_1 \\ \vdots \\ c_n \end{array} \right)\,=\, | ||
\left(\begin{array} {c} | \left(\begin{array} {c} | ||
f(x_0) \\ f(x_1) \\ \vdots \\ f(x_n) \end{array} \right) | f(x_0) \\ f(x_1) \\ \vdots \\ f(x_n) \end{array} \right)</math></center> | ||
</math></center> | |||
Aby wykazać, że układ ten ma jednoznaczne rozwiązanie [[Algebra liniowa | Aby wykazać, że układ ten ma jednoznaczne rozwiązanie [[Algebra liniowa z geometrią analityczną/Wykład 8: Zastosowania wyznacznika. Układy równań liniowych|wystarczy, aby wektor zerowy był jedynym rozwiązaniem układu jednorodnego]]. | ||
z geometrią analityczną/Wykład 8: Zastosowania wyznacznika. Układy równań liniowych|wystarczy, aby wektor zerowy był jedynym rozwiązaniem układu jednorodnego]]. | |||
Rzeczywiście, układ jednorodny odpowiada interpolacji danych zerowych, | Rzeczywiście, układ jednorodny odpowiada interpolacji danych zerowych, | ||
<math> | <math>f(x_i)=0</math>, <math>\forall i</math>. Istnienie niezerowego rozwiązania byłoby | ||
więc równoważne istnieniu niezerowego wielomianu stopnia nie większego | więc równoważne istnieniu niezerowego wielomianu stopnia nie większego | ||
od <math> | od <math>n</math>, który miałby <math>n+1</math> różnych zer <math>x_i</math>, co jest niemożliwe. | ||
}} | }} | ||
Zadanie znalezienia dla danej funkcji <math> | Zadanie znalezienia dla danej funkcji <math>f</math> jej wielomianu interpolacyjnego | ||
stopnia co najwyżej <math> | stopnia co najwyżej <math>n</math> jest więc dobrze zdefiniowane, tzn. rozwiązanie | ||
istnieje i jest wyznaczone jednoznacznie. Zauważmy, że wielomian | istnieje i jest wyznaczone jednoznacznie. Zauważmy, że wielomian | ||
interpolacyjny <math> | interpolacyjny <math>w_f</math> jako taki nie może być wynikiem obliczeń w naszym | ||
modelu obliczeniowym. Możemy natomiast wyznaczyć jego współczynniki | modelu obliczeniowym. Możemy natomiast wyznaczyć jego współczynniki | ||
<math> | <math>c_j</math> w wybranej bazie. | ||
{{definicja||| | {{definicja||| | ||
Niech <math> | Niech <math>(\varphi_j)_{j=0}^n</math> będzie bazą w przestrzeni | ||
<math> | <math>\Pi_n</math> wielomianów stopnia co najwyżej <math>n</math>. Zadanie | ||
interpolacji wielomianowej polega na obliczeniu dla danej funkcji <math> | interpolacji wielomianowej polega na obliczeniu dla danej funkcji <math>f</math> | ||
współczynników <math> | współczynników <math>c_j</math> takich, że wielomian | ||
<center><math> | <center><math> | ||
w_f(\cdot)\,=\,\sum_{j=0}^n c_j\varphi_j(\cdot) | w_f(\cdot)\,=\,\sum_{j=0}^n c_j\varphi_j(\cdot) | ||
</math></center> | </math></center> | ||
interpoluje <math> | interpoluje <math>f</math> w punktach <math>x_j</math>, <math>0\le j\le n</math>. | ||
}} | }} | ||
Linia 111: | Linia 107: | ||
Jak już wiemy, zadanie interpolacji Lagrange'a sprowadza się do rozwiązania | 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 <strong>wyboru sposobu | układu równań liniowych. Okazuje się, że w zależności od <strong>wyboru sposobu | ||
reprezentacji</strong> naszego wielomianu (czyli od wyboru bazy wielomianowej <math> | reprezentacji</strong> naszego wielomianu (czyli od wyboru bazy wielomianowej <math>(\varphi_j)_{j=0}^n</math>), układ | ||
ten może być albo bardzo łatwy do rozwiązania, albo bardzo trudny. Co | ten może być albo bardzo łatwy do rozwiązania, albo bardzo trudny. Co | ||
więcej, jego rozwiązanie w arytmetyce <math> | więcej, jego rozwiązanie w arytmetyce <math>fl_\nu</math> może napotykać na większe bądź | ||
mniejsze trudności (w zależności np. od uwarunkowania macierzy układu, który | mniejsze trudności (w zależności np. od uwarunkowania macierzy układu, który | ||
musimy rozwiązać). | musimy rozwiązać). | ||
Linia 123: | Linia 119: | ||
</blockquote> | </blockquote> | ||
W naturalny sposób powstaje więc problem wyboru "wygodnej" bazy w <math> | W naturalny sposób powstaje więc problem wyboru "wygodnej" bazy w <math>\Pi_n</math>. | ||
Rozpatrzymy trzy bazy: Lagrange'a, potęgową i Newtona. | Rozpatrzymy trzy bazy: Lagrange'a, potęgową i Newtona. | ||
===Baza Lagrange'a (kanoniczna)=== | ===Baza Lagrange'a (kanoniczna)=== | ||
Zdefiniujmy dla <math> | Zdefiniujmy dla <math>0\le j\le n</math> wielomiany | ||
<center><math> | <center><math> | ||
l_j(x)\,=\,\frac | l_j(x)\,=\,\frac | ||
{(x -x_0)(x -x_1)\cdots(x -x_{j-1})(x -x_{j+1})\cdots(x -x_n)} | {(x -x_0)(x -x_1)\cdots(x -x_{j-1})(x -x_{j+1})\cdots(x -x_n)} | ||
{(x_j-x_0)(x_j-x_1)\cdots(x_j-x_{j-1})(x_j-x_{j+1})\cdots(x_j-x_n)} | {(x_j-x_0)(x_j-x_1)\cdots(x_j-x_{j-1})(x_j-x_{j+1})\cdots(x_j-x_n)}</math></center> | ||
</math></center> | |||
Zauważmy, że każdy z <math> | Zauważmy, że każdy z <math>l_j</math> jest stopnia dokładnie <math>n</math> oraz | ||
<center><math> | <center><math>l_j(x_i)\,=\,\left\{\,\begin{array} {ll} | ||
0 & \quad i\ne j, \\ 1 & \quad i=j. \end{array} \right. | 0 & \quad i\ne j, \\ 1 & \quad i=j. \end{array} \right.</math></center> | ||
</math></center> | |||
Teraz widać, że wielomiany te stanowią bazę w <math> | Teraz widać, że wielomiany te stanowią bazę w <math>\Pi_n</math>, | ||
którą nazywamy <strong>bazą Lagrange'a</strong>. Macierz układu zadania interpolacji | którą nazywamy <strong>bazą Lagrange'a</strong>. Macierz układu zadania interpolacji | ||
jest w takim wypadku identycznością i w konsekwencji <math> | jest w takim wypadku identycznością i w konsekwencji <math>c_j=f(x_j)</math>, <math>\forall j</math>. | ||
Wielomian interpolacyjny dla funkcji <math> | Wielomian interpolacyjny dla funkcji <math>f</math> można więc | ||
zapisać jako | zapisać jako | ||
<center><math> | <center><math>w_f(x)\,=\,\sum_{j=0}^n f(x_j)l_j(x)</math></center> | ||
</math></center> | |||
Koszt kombinatoryczny rozwiązania zadania interpolacji jest przy tym | Koszt kombinatoryczny rozwiązania zadania interpolacji jest przy tym | ||
Linia 157: | Linia 150: | ||
Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu | Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu | ||
interpolacyjnego <math> | interpolacyjnego <math>w_f</math> w punkcie <math>x</math> różnym od <math>x_j</math>, <math>0\le j\le n</math>. | ||
Podstawiając | Podstawiając | ||
<center><math> | <center><math>w_j\,=\,\frac 1 {(x_j-x_0)(x_j-x_1)\cdots(x_j-x_{j-1}) | ||
(x_j-x_{j+1})\cdots(x_j-x_n)} | (x_j-x_{j+1})\cdots(x_j-x_n)} | ||
</math></center> | </math></center> | ||
oraz <math> | oraz <math>p_n(x)=(x-x_0)\cdots(x-x_n)</math> mamy <strong>pierwszy wzór barycentryczny</strong> | ||
<center><math> | <center><math> | ||
w_f(x)\,=\,p_n(x)\sum_{j=0}^n\frac{w_jf(x_j)}{x-x_j} | w_f(x)\,=\,p_n(x)\sum_{j=0}^n\frac{w_jf(x_j)}{x-x_j}</math>,</center> | ||
</math></center> | |||
i ostatecznie dostajemy tzw. <strong>drugi wzór barycentryczny</strong> na wielomian interpolacyjny, | i ostatecznie dostajemy tzw. <strong>drugi wzór barycentryczny</strong> na wielomian interpolacyjny, | ||
<center><math> | <center><math>w_f(x)\,=\,\frac{\sum_{j=0}^n q_j(x)f(x_j)}{\sum_{j=0}^n q_j(x)}</math>,</center> | ||
</math></center> | |||
gdzie <math> | gdzie <math>q_j(x)=w_j/(x-x_j)</math>. W ostatniej równości wykorzystaliśmy fakt, | ||
że <math> | że <math>p_n(x)\equiv (\sum_{j=0}^n q_j(x))^{-1}</math>, co łatwo widzieć, rozpatrując | ||
zadanie interpolacji funkcji <math> | zadanie interpolacji funkcji <math>f\equiv 1</math>. Drugi wzór barycentryczny jest korzystniejszy w implementacji. | ||
Dla wielu układów węzłów, wagi <math> | Dla wielu układów węzłów, wagi <math>w_j</math> są zadane jawnymi wzorami, np. dla węzłów | ||
równoodległych (niezależnie od tego, na jakim odcinku!) wagi w <strong>drugim</strong> wzorze barycentrycznym wynoszą po prostu | równoodległych (niezależnie od tego, na jakim odcinku!) wagi w <strong>drugim</strong> wzorze barycentrycznym wynoszą po prostu | ||
<center><math> | <center><math>w_j = (-1)^j \begin{pmatrix} n \\ j \end{pmatrix} </math></center> | ||
</math></center> | |||
Również dla | Również dla [[#O optymalnym doborze węzłów|węzłów Czebyszewa]] istnieją eleganckie wzory na takie współczynnki. | ||
Można pokazać, że wartość <math> | Można pokazać, że wartość <math>\widetilde{w_f(x)}</math> wielomianu iterpolacyjnego obliczona w arytmetyce <math>fl_\nu</math> według pierwszego wzoru barycentrycznego spełnia | ||
<center><math> | <center><math> | ||
\widetilde{w_f(x)} = p_n(x) \sum_{j=0}^n\frac{w_j}{x-x_j}f(x_j)(1+\epsilon_j) | \widetilde{w_f(x)} = p_n(x) \sum_{j=0}^n\frac{w_j}{x-x_j}f(x_j)(1+\epsilon_j)</math>,</center> | ||
</math></center> | |||
gdzie <math> | gdzie <math>|\epsilon_j| \leq 5(n+1)</math>, a więc jest to algorytm numerycznie poprawny. | ||
Zachowanie drugiej postaci wzoru barycentrycznego w arytmetyce <math> | Zachowanie drugiej postaci wzoru barycentrycznego w arytmetyce <math>fl_\nu</math> jest nieco | ||
bardziej skomplikowane. | bardziej skomplikowane. | ||
Linia 201: | Linia 190: | ||
Znacznie prościej można obliczyć wartość wielomianu interpolacyjnego, | Znacznie prościej można obliczyć wartość wielomianu interpolacyjnego, | ||
(a także jego pochodnych), gdy jest on dany w najczęściej używanej | (a także jego pochodnych), gdy jest on dany w najczęściej używanej | ||
<strong>bazie potęgowej</strong>, <math> | <strong>bazie potęgowej</strong>, <math>\varphi_j(x)=x^j</math>, <math>\forall j</math>. Jeśli bowiem | ||
<center><math> | <center><math>w_f(x)\,=\,a_0+a_1x+\cdots+ a_nx^n</math>,</center> | ||
</math></center> | |||
to również | to również | ||
<center><math> | <center><math>w_f(x)\,=\,(\cdots(a_nx+a_{n-1})x+a_{n-2})x+\cdots+a_1)x+a_0</math>,</center> | ||
</math></center> | |||
co sugeruje zastosowanie następującego <strong>schematu Hornera</strong> | co sugeruje zastosowanie następującego <strong>schematu Hornera</strong> | ||
do obliczenia <math> | do obliczenia <math>w_f(x)</math>: | ||
{{algorytm|Algorytm Hornera|Algorytm Hornera| | {{algorytm|Algorytm Hornera|Algorytm Hornera| | ||
<pre><math> | <pre><math>v_n = a_n;</math> | ||
for (j=n-1; j >= 0 ; j--) | for (j=n-1; j >= 0 ; j--) | ||
<math> | <math>v_j\, = \,v_{j+1}\cdot x\,+\,a_j</math>; | ||
</pre>}} | </pre>}} | ||
Po wykonaniu tego algorytmu <math> | Po wykonaniu tego algorytmu <math>w_f(x)=v_0</math>. Schemat Hornera wymaga wykonania | ||
tylko <math> | tylko <math>n</math> mnożeń i <math>n</math> dodawań. Ma on również głębszy sens, | ||
bo jego produktem ubocznym mogą być także wartości pochodnych naszego wielomianu w <math> | bo jego produktem ubocznym mogą być także wartości pochodnych naszego wielomianu w <math>x</math>. Algorytm Hornera okazuje się ''optymalny''. Każdy inny algorytm obliczający dokładną wartość wielomianu, gdy danymi są współczynniki wielomianu, wymaga wykonania co najmniej <math>n</math> mnożeń i <math>n</math> dodawań. Algorytm Hornera jest też numerycznie poprawny. | ||
Zauważmy jednak, że w przypadku bazy potęgowej macierz | Zauważmy jednak, że w przypadku bazy potęgowej macierz | ||
<math> | <math>(x_i^j)_{i,j=0}^n</math> układu zadania interpolacji jest pełna. Jest to tzw. | ||
<strong>macierz Vandermonde'a</strong>. Obliczenie współczynników wielomianu | <strong>macierz Vandermonde'a</strong>. Obliczenie współczynników wielomianu | ||
interpolacyjnego w bazie potęgowej bezpośrednio z tego układu, stosując | interpolacyjnego w bazie potęgowej bezpośrednio z tego układu, stosując | ||
jedną ze znanych nam już metod, kosztowałoby rzędu <math> | jedną ze znanych nam już metod, kosztowałoby rzędu <math>n^3</math> operacji | ||
arytmetycznych. Co gorsza, w często spotykanym przypadku, gdy węzły interpolacji | arytmetycznych. Co gorsza, w często spotykanym przypadku, gdy węzły interpolacji | ||
są równoodległe, ta macierz jest bardzo źle uwarunkowana! | są równoodległe, ta macierz jest bardzo źle uwarunkowana! | ||
Linia 235: | Linia 222: | ||
Rozwiązaniem pośrednim, które łączy prostotę obliczenia | Rozwiązaniem pośrednim, które łączy prostotę obliczenia | ||
współczynników z prostotą obliczenia wartości <math> | współczynników z prostotą obliczenia wartości <math>w_f(x)</math> i ewentualnie jego | ||
pochodnych, jest wybór <strong>bazy Newtona</strong>, | pochodnych, jest wybór <strong>bazy Newtona</strong>, | ||
<center><math>\ | <center><math>\begin{align} p_0(x) &= 1, \\ | ||
p_j(x) &= (x-x_0)(x-x_1)\cdots(x-x_{j-1}),\qquad 1\le j\le n. | p_j(x) &= (x-x_0)(x-x_1)\cdots(x-x_{j-1}),\qquad 1\le j\le n. | ||
\ | \end{align}</math></center> | ||
W tym przypadku współczynniki rozwinięcia wielomianu interpolacyjnego | W tym przypadku współczynniki rozwinięcia wielomianu interpolacyjnego | ||
będziemy oznaczać przez <math> | będziemy oznaczać przez <math>b_j</math>, | ||
<center><math> | <center><math>w_f\,=\,\sum_{j=0}^n b_jp_j</math></center> | ||
</math></center> | |||
Zwróćmy od razu uwagę na ważną własność bazy Newtona. Jeśli | Zwróćmy od razu uwagę na ważną własność bazy Newtona. Jeśli | ||
<math> | <math>w_{f,j}\in\Pi_j</math> jest wielomianem interpolacyjnym dla funkcji <math>f</math> opartym | ||
na węzłach <math> | na węzłach <math>x_0,x_1,\ldots,x_j</math>, <math>0\le j\le n</math>, to <math>w_{f,0}=b_0</math> oraz | ||
<center><math> | <center><math> | ||
w_{f,j}\,=\,w_{f,j-1}\,+\,b_jp_j,\qquad 1\le j\le n | w_{f,j}\,=\,w_{f,j-1}\,+\,b_jp_j,\qquad 1\le j\le n</math></center> | ||
</math></center> | |||
Wartość <math> | Wartość <math>w_f(x)</math> możemy obliczyć, stosując prostą modyfikację | ||
algorytmu Hornera: | algorytmu Hornera: | ||
{{algorytm|Algorytm Hornera dla bazy Newtona|Algorytm Hornera dla bazy Newtona| | {{algorytm|Algorytm Hornera dla bazy Newtona|Algorytm Hornera dla bazy Newtona| | ||
<pre><math> | <pre><math>v_n = b_n;</math> | ||
for (j=n-1; j >= 0 ; j--) | for (j=n-1; j >= 0 ; j--) | ||
<math> | <math>v_j\, = \,v_{j+1}\cdot (x-x_j)\,+\,b_j</math>; | ||
</pre>}} | </pre>}} | ||
Ponadto układ równań zadania interpolacji jest trójkątny dolny, o specyficznej | 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 | strukturze, dzięki czemu można stworzyć elegancki algorytm, który teraz | ||
przedstawimy. | przedstawimy. | ||
==Algorytm różnic dzielonych== | ==Algorytm różnic dzielonych== | ||
<strong>Różnicę dzieloną</strong> funkcji <math> | <strong>Różnicę dzieloną</strong> funkcji <math>f</math> opartą na różnych węzłach | ||
<math> | <math>t_0,t_1,\ldots,t_s</math>, gdzie <math>s\ge 1</math>, definiuje się indukcyjnie jako | ||
<center><math> | <center><math> | ||
f(t_0,t_1,\ldots,t_s)\,=\,\frac | f(t_0,t_1,\ldots,t_s)\,=\,\frac | ||
{f(t_1,t_2,\ldots,t_s)\,-\,f(t_0,t_1,\ldots,t_{s-1})}{t_s\,-\,t_0} | {f(t_1,t_2,\ldots,t_s)\,-\,f(t_0,t_1,\ldots,t_{s-1})}{t_s\,-\,t_0}</math></center> | ||
</math></center> | |||
Zachodzi następujące ważne twierdzenie. | Zachodzi następujące ważne twierdzenie. | ||
Linia 283: | Linia 267: | ||
{{twierdzenie|O różnicach dzielonych|O różnicach dzielonych| | {{twierdzenie|O różnicach dzielonych|O różnicach dzielonych| | ||
Współczynniki <math> | Współczynniki <math>b_j</math> wielomianu | ||
interpolacyjnego Newtona dla danej funkcji <math> | interpolacyjnego Newtona dla danej funkcji <math>f</math> dane są przez | ||
różnice dzielone <math> | różnice dzielone <math>f</math> w węzłach <math>x_0,x_1,\ldots,x_j</math>, tzn. | ||
<center><math> | <center><math>b_j\,=\,f(x_0,x_1,\ldots,x_j),\qquad 0\le j\le n</math></center> | ||
</math></center> | |||
}} | }} | ||
{{dowod||| | {{dowod||| | ||
Dla <math> | Dla <math>0\le i\le j\le n</math>, oznaczmy przez <math>w_{i,j}</math> | ||
wielomian z <math> | wielomian z <math>\Pi_{j-i}</math> interpolujący <math>f</math> w węzłach | ||
<math> | <math>x_i,x_{i+1},\ldots,x_j</math>. Wtedy ma miejsce następująca równość (<math>i<j</math>): | ||
<center><math> | <center><math> | ||
w_{i,j}(x)\,=\,\frac{(x-x_i)w_{i+1,j}(x)\,-\,(x-x_j)w_{i,j-1}(x)} | w_{i,j}(x)\,=\,\frac{(x-x_i)w_{i+1,j}(x)\,-\,(x-x_j)w_{i,j-1}(x)} | ||
{x_j\,-\,x_i}, \qquad\forall x | {x_j\,-\,x_i}, \qquad\forall x</math></center> | ||
</math></center> | |||
Aby ją pokazać wystarczy, że prawa strona tej równości, którą | Aby ją pokazać wystarczy, że prawa strona tej równości, którą | ||
oznaczymy przez <math> | oznaczymy przez <math>v(x)</math>, przyjmuje wartości <math>f(x_s)</math> dla <math>x=x_s</math>, | ||
<math> | <math>i\le s\le j</math>. Rzeczywiście, jeśli <math>i+1\le s\le j-1</math> to | ||
<center><math> | <center><math>v(x_s)\,=\,\frac{(x_s-x_i)f(x_s)-(x_s-x_j)f(x_s)}{x_j-x_i} | ||
\,=\,f(x_s) | \,=\,f(x_s)</math></center> | ||
</math></center> | |||
Ponadto | Ponadto | ||
<center><math> | <center><math>v(x_i)\,=\,\frac{-(x_i-x_j)}{x_j-x_i}f(x_i)\,=\,f(x_i)</math>,</center> | ||
</math></center> | |||
oraz podobnie <math> | oraz podobnie <math>v(x_j)=f(x_j)</math>. Stąd <math>v</math> jest wielominem | ||
z <math> | z <math>\Pi_{j-i}</math> interpolującym <math>f</math> w węzłach <math>x_s</math>, <math>i\le s\le j</math>, | ||
czyli <math> | czyli <math>w_{i,j}=v</math>. | ||
Dalej postępujemy indukcyjnie ze względu na stopień <math> | Dalej postępujemy indukcyjnie ze względu na stopień <math>n</math> | ||
wielomianu interpolacyjnego. Dla <math> | wielomianu interpolacyjnego. Dla <math>n=0</math> mamy oczywiście <math>b_0=f(x_0)</math>. | ||
Niech <math> | Niech <math>n\ge 1</math>. Ponieważ, jak łatwo zauważyć, | ||
<center><math> | <center><math>w_{0,n}(x)\,=\,w_{0,n-1}(x)+b_n p_n(x)</math>,</center> | ||
</math></center> | |||
z założenia indukcyjnego mamy <math> | z założenia indukcyjnego mamy <math>b_j=f(x_0,\ldots,x_j)</math> dla | ||
<math> | <math>0\le j\le n-1</math>. Aby pokazać podobną równość dla <math>b_n</math>, | ||
zauważmy, że | zauważmy, że | ||
<center><math> | <center><math>w_{0,n}(x)\,=\,\frac{(x-x_0)w_{1,n}(x)-(x-x_n)w_{0,n-1}(x)}{x_n-x_0}</math></center> | ||
</math></center> | |||
Zauważmy teraz, że <math> | Zauważmy teraz, że <math>b_n</math> jest współczynnikiem przy <math>x^n</math> | ||
w wielomianie <math> | w wielomianie <math>w_{0,n}</math>. Z założenia indukcyjnego wynika, że | ||
współczynniki przy <math> | współczynniki przy <math>x^{n-1}</math> w wielomianach <math>w_{1,n}</math> i <math>w_{0,n-1}</math> | ||
są ilorazami różnicowymi opartymi odpowiednio na węzłach | są ilorazami różnicowymi opartymi odpowiednio na węzłach | ||
<math> | <math>x_1,\ldots,x_n</math> i <math>x_0,\ldots,x_{n-1}</math>. Stąd | ||
<center><math> | <center><math>b_n\,=\,\frac{f(x_1,\ldots,x_n)-f(x_0,\ldots,x_{n-1})}{x_n-x_0} | ||
\,=\,f(x_0,x_1,\ldots,x_n) | \,=\,f(x_0,x_1,\ldots,x_n)</math>,</center> | ||
</math></center> | |||
co kończy dowód. | co kończy dowód. | ||
}} | }} | ||
Różnicę dzieloną <math> | Różnicę dzieloną <math>f(x_0,x_1,\ldots,x_n)</math> można łatwo | ||
obliczyć na podstawie wartości <math> | obliczyć na podstawie wartości <math>f(x_j)</math>, <math>0\le j\le n</math>, | ||
budując następującą tabelkę: | budując następującą tabelkę: | ||
<center><math> | <center><math>\begin{array} {llllll} | ||
x_0 & f(x_0) \\ | x_0 & f(x_0) \\ | ||
x_1 & f(x_1) & f(x_0,x_1) \\ | x_1 & f(x_1) & f(x_0,x_1) \\ | ||
Linia 359: | Linia 336: | ||
</math></center> | </math></center> | ||
<div class="center"><div class="thumb tnone"><div style="width:552px;"><flash>file=Interpolacja.swf|width=550|height=300</flash> <div class="thumbcaption">Wyznaczenie wielomianu <math> | <div class="center"><div class="thumb tnone"><div style="width:552px;"><flash>file=Interpolacja.swf|width=550|height=300</flash> <div class="thumbcaption">Wyznaczenie wielomianu <math>w</math> interpolującego zestaw punktów <math>(0,2)(1,5)(-1,7)</math> algorytmem różnic dzielonych</div></div></div></div> | ||
Zauważmy przy tym, że "po drodze" obliczamy | Zauważmy przy tym, że "po drodze" obliczamy | ||
<math> | <math>f(x_i,x_{i+1},\ldots,x_j)</math> dla wszystkich <math>0\le i < j\le n</math>, a więc | ||
w szczególności również interesujące nas różnice dzielone | w szczególności również interesujące nas różnice dzielone | ||
<math> | <math>f(x_0,x_1,\ldots,x_j)</math>. Stąd i z twierdzenia o różnicach dzielonych | ||
wynika algorytm obliczania współczynników | wynika algorytm obliczania współczynników | ||
<math> | <math>b_j</math> wielomianu interpolacyjnego w bazie Newtona. | ||
Po wykonaniu następującego algorytmu, | Po wykonaniu następującego algorytmu, | ||
{{algorytm|Metoda różnic dzielonych|Metoda różnic dzielonych| | {{algorytm|Metoda różnic dzielonych|Metoda różnic dzielonych| | ||
<pre>for (j = 0; j <= n; j++) | <pre>for (j = 0; j <= n; j++) | ||
<math> | <math>b_j</math> = <math>f(x_j)</math>; | ||
for (j = | for (j = 1; j <= n; j++) | ||
for (k = n; k >= j; k--) | for (k = n; k >= j; k--) | ||
<math> | <math>b_k</math> = <math>(b_k-b_{k-1})/(x_k - x_{k-j})</math>; | ||
</pre>}} | </pre>}} | ||
współczynniki <math> | współczynniki <math>b_j</math> na końcu algorytmu zawierają wspólczynniki wielomianu | ||
interpolacyjnego w bazie Newtona. Czy gdybyś zobaczył ten algorytm na samym | interpolacyjnego w bazie Newtona. Czy gdybyś zobaczył ten algorytm na samym | ||
początku tego wykładu, zgadłbyś, do czego może służyć?! | początku tego wykładu, zgadłbyś, do czego może służyć?! | ||
<div class="center"><div class="thumb tnone"><div style="width:552px;"><flash>file=Interpolacjainsitu.swf|width=550|height=300</flash> <div class="thumbcaption">Wyznaczenie tego samego wielomianu <math> | <div class="center"><div class="thumb tnone"><div style="width:552px;"><flash>file=Interpolacjainsitu.swf|width=550|height=300</flash> <div class="thumbcaption">Wyznaczenie tego samego wielomianu <math>w</math>, interpolującego zestaw punktów <math>(0,2)(1,5)(-1,7)</math> algorytmem różnic dzielonych --- wykonanym tym razem ''in situ''.</div></div></div></div> | ||
Okazuje się, że przy realizacji w <math> | Okazuje się, że przy realizacji w <math>fl_\nu</math> | ||
algorytmu różnic dzielonych istotną rolę odgrywa porządek | algorytmu różnic dzielonych istotną rolę odgrywa porządek | ||
węzłów. Można pokazać, że --- o ile węzły są uporządkowane nierosnąco lub | węzłów. Można pokazać, że --- o ile węzły są uporządkowane nierosnąco lub | ||
niemalejąco --- algorytm liczenia <math> | niemalejąco --- algorytm liczenia <math>f(t_0,\ldots,t_n)</math> | ||
jest numerycznie poprawny ze względu na dane interpolacyjne | jest numerycznie poprawny ze względu na dane interpolacyjne | ||
<math> | <math>f(t_j)</math>, a cały algorytm różnic dzielonych daje w arytmetyce <math>fl_\nu</math> współczynniki wielomianu interpolacyjnego, będące niewiekim zaburzeniem wartości dokładnych. | ||
==Uwarunkowanie== | ==Uwarunkowanie== | ||
Danymi w zadaniu interpolacji są zarówno wartości interpolowanej funkcji, jak i | 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 <math> | 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 <math>f</math> rozpatrzyć jej zaburzenie <math>f+\Delta f</math>, gdzie <math>|\Delta f| \leq \epsilon</math>, to | ||
<center><math> | <center><math>|w_f(x) - w_{f+\Delta f}(x)| \leq \mbox{cond} (x,f)|w_f(x)|\epsilon</math>,</center> | ||
</math></center> | |||
gdzie | gdzie | ||
<center><math> | <center><math>\mbox{cond} (x,f) = \frac{\sum_{j=0}^n |l_j(x) f(x_j)|}{|p_n(x)|} \geq 1</math></center> | ||
</math></center> | |||
Znacznie rzadziej rozważa się uwarunkowanie zadania interpolacji ze względu na zaburzenie węzłów. Warto zaznaczyć, że zaburzenie danych interpolacji tylko w jednym punkcie może mieć wpływ na przebieg całego wielomianu interpolacyjnego, co ukazuje poniższy przykład: | Znacznie rzadziej rozważa się uwarunkowanie zadania interpolacji ze względu na zaburzenie węzłów. Warto zaznaczyć, że zaburzenie danych interpolacji tylko w jednym punkcie może mieć wpływ na przebieg całego wielomianu interpolacyjnego, co ukazuje poniższy przykład: | ||
Linia 409: | Linia 384: | ||
<div class="solution" style="margin-left,margin-right:3em;"> | <div class="solution" style="margin-left,margin-right:3em;"> | ||
Pokażemy zmianę kilku bazowych wielomianów Lagrange'a stopnia 10 (dla węzłów równoodległych w <math> | Pokażemy zmianę kilku bazowych wielomianów Lagrange'a stopnia 10 (dla węzłów równoodległych w <math>[0,1]</math>) w sytuacji, gdy trzeci węzeł interpolacji zostanie zaburzony o 0.01. | ||
[[Image:MNlagrangebasis.png|thumb|550px|center|Wybrane wielomiany bazowe Lagrange'a oparte na węzłach równoodległych (zielone) kontra te same wielomiany, oparte na tych samych węzłach, z jednym wyjątkiem: węzeł <math> | [[Image:MNlagrangebasis.png|thumb|550px|center|Wybrane wielomiany bazowe Lagrange'a oparte na węzłach równoodległych (zielone) kontra te same wielomiany, oparte na tych samych węzłach, z jednym wyjątkiem: węzeł <math>x_3 = 0.2</math> został zmieniony na <math>x_3 = 0.21</math> (czerwone).]] | ||
Jak widać, to ''lokalne'' zaburzenie danych może powodować wyraźne ''globalne'' zaburzenie całego wielomianu interpolacyjnego (zwróć uwagę na prawy koniec przedziału!). | Jak widać, to ''lokalne'' zaburzenie danych może powodować wyraźne ''globalne'' zaburzenie całego wielomianu interpolacyjnego (zwróć uwagę na prawy koniec przedziału!). | ||
Linia 417: | Linia 392: | ||
</div></div> | </div></div> | ||
MATLAB i Octave mają wbudowaną funkcję wyznaczającą wielomian, interpolujący zadane wartości: jeśli <code style="color: #006">x</code> jest wektorem zawierającym <math> | MATLAB i Octave mają wbudowaną funkcję wyznaczającą wielomian, interpolujący zadane wartości: jeśli <code style="color: #006">x</code> jest wektorem zawierającym <math>N</math> węzłów, a <code style="color: #006">y</code> --- wektorem zawierającym wartości w węzłach, to | ||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>c = polyfit(x,y,N-1); | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>c = polyfit(x,y,N-1); | ||
</pre></div> | </pre></div> | ||
daje współczynniki wielomianu interpolacyjnego (Ostatni argument jest równy <math> | daje współczynniki wielomianu interpolacyjnego (Ostatni argument jest równy <math>N-1</math>, bo taki powinien być stopień wielomianu interpolacyjnego Lagrange'a!). | ||
Co ciekawe (i budzące trochę zgrozy!) --- wielomian (zarówno w MATLABie, jak w Octave) jest wyznaczany w bazie naturalnej, przez rozwiązanie układu równań z macierzą Vandermonde'a, a więc w sposób najgorszy z możliwych. Nie sądzisz, że czas najwyższy, aby to zmienić? Napisz odpowiedni kod i wyślij do [http://octave.sf.net Octave-forge]! | Co ciekawe (i budzące trochę zgrozy!) --- wielomian (zarówno w MATLABie, jak w Octave) jest wyznaczany w bazie naturalnej, przez rozwiązanie układu równań z macierzą Vandermonde'a, a więc w sposób najgorszy z możliwych. Nie sądzisz, że czas najwyższy, aby to zmienić? Napisz odpowiedni kod i wyślij do [http://octave.sf.net Octave-forge]! | ||
Aby teraz wyznaczyć wartości takiego wielomianu w zadanych punktach <math> | Aby teraz wyznaczyć wartości takiego wielomianu w zadanych punktach <math>X</math>, także musimy użyć specjalnej funkcji, | ||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>Y = polyval(c,X); | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>Y = polyval(c,X); | ||
Linia 444: | Linia 418: | ||
|+ <span style="font-variant:small-caps"> </span> | |+ <span style="font-variant:small-caps"> </span> | ||
|- | |- | ||
| <math> | | <math>x</math> || 2 || 1 || 0 | ||
|- | |- | ||
| <math> | | <math>y</math> || 5 || 2 || 1 | ||
|} | |} | ||
Linia 468: | Linia 442: | ||
</nowiki></div> | </nowiki></div> | ||
Zgodnie z przewidywaniami, otrzymaliśmy wielomian <math> | Zgodnie z przewidywaniami, otrzymaliśmy wielomian <math>1\cdot x^2 + 0\cdot x + 1</math>. | ||
Wartość tego wielomianu dla <math> | Wartość tego wielomianu dla <math>x=3</math> rzeczywiście jest równa 10. | ||
A co się stanie, gdy będziemy szukać wielomianu stopnia niższego? | A co się stanie, gdy będziemy szukać wielomianu stopnia niższego? | ||
Linia 477: | Linia 451: | ||
</nowiki></div> | </nowiki></div> | ||
Też "coś" zostało obliczone --- wielomian (jak domyślamy się) <math> | Też "coś" zostało obliczone --- wielomian (jak domyślamy się) <math>2\cdot x + \frac{2}{3}</math>. Nie dziwi, że ten wielomian nie jest wielomianem interpolacyjnym (dlaczego?) --- więc czym może być? Okazuje się, że to coś to wielomian nalepiej pasujący do danych w sensie [[MN12#Dopasowanie krzywej minimalizującej błąd średniokwadratowy|aproksymacji średniokwadratowej]], o czym będzie mowa w innym wykładzie. | ||
Warto jeszcze może wiedzieć, że <code style="color: #006">polyfit</code> można także wywołać dla jeszcze wyższego stopnia wielomianu, jednak, co niespodziewane, wynikiem ''nie będzie'' wielomian stopnia 2, uzyskany poprzednio: | Warto jeszcze może wiedzieć, że <code style="color: #006">polyfit</code> można także wywołać dla jeszcze wyższego stopnia wielomianu, jednak, co niespodziewane, wynikiem ''nie będzie'' wielomian stopnia 2, uzyskany poprzednio: | ||
Linia 496: | Linia 470: | ||
Uogólnieniem rozpatrzonego zadania interpolacji jest zadanie | Uogólnieniem rozpatrzonego zadania interpolacji jest zadanie | ||
interpolacji <strong>Hermite'a</strong>. Zakładamy, że oprócz (różnych) | interpolacji <strong>Hermite'a</strong>. Zakładamy, że oprócz (różnych) | ||
węzłów <math> | węzłów <math>x_j</math> dane są również ich krotności <math>n_j</math>, <math>0\le j\le k</math>, | ||
przy czym <math> | przy czym <math>\sum_{j=0}^k n_j=n+1</math>. Należy skonstruować wielomian | ||
<math> | <math>w_f\in\Pi_n</math> taki, że | ||
<center><math> | <center><math>w_f^{(i)}(x_j)\,=\,f^{(i)}(x_j)\qquad \mbox{ dla } \quad | ||
0\le i\le n_j-1, 0\le j\le k. | 0\le i\le n_j-1, 0\le j\le k. | ||
</math></center> | </math></center> | ||
Oczywiście zakładamy przy tym, że odpowiednie pochodne funkcji | Oczywiście zakładamy przy tym, że odpowiednie pochodne funkcji | ||
<math> | <math>f</math> istnieją. | ||
{{lemat||| | {{lemat||| | ||
Linia 515: | Linia 489: | ||
Istnienie i jednoznaczność rozwiązania można | Istnienie i jednoznaczność rozwiązania można | ||
uzasadnić tak samo jak w przypadku węzłów jednokrotnych. | uzasadnić tak samo jak w przypadku węzłów jednokrotnych. | ||
Przedstawiając wielomian w dowolnej bazie otrzymujemy układ <math> | Przedstawiając wielomian w dowolnej bazie otrzymujemy układ <math>n+1</math> | ||
równań z <math> | równań z <math>n+1</math> niewiadomymi, który dla zerowej prawej strony ma | ||
jedynie rozwiązanie zerowe. Inaczej bowiem istniałby wielomian niezerowy | jedynie rozwiązanie zerowe. Inaczej bowiem istniałby wielomian niezerowy | ||
stopnia nie większego niż <math> | stopnia nie większego niż <math>n</math>, który miałby zera o łącznej krotności | ||
większej niż <math> | większej niż <math>n</math>. | ||
}} | }} | ||
Nas oczywiście interesuje konstrukcja wielomianu <math> | Nas oczywiście interesuje konstrukcja wielomianu <math>w_f</math>. W tym celu | ||
ustawimy węzły <math> | ustawimy węzły <math>x_j</math> w ciąg | ||
<center><math> | <center><math>(\bar x_0,\bar x_1,\ldots,\bar x_n)\,=\, | ||
(\underbrace{x_0,\ldots,x_0}_{n_0},\underbrace{x_1,\ldots,x_1}_{n_1}, | (\underbrace{x_0,\ldots,x_0}_{n_0},\underbrace{x_1,\ldots,x_1}_{n_1}, | ||
\ldots,\underbrace{x_k,\ldots,x_k}_{n_k}) | \ldots,\underbrace{x_k,\ldots,x_k}_{n_k}) | ||
</math></center> | </math></center> | ||
i zdefiniujemy uogólnioną bazę Newtona w <math> | i zdefiniujemy uogólnioną bazę Newtona w <math>\Pi_n</math> jako | ||
<center><math>\ | <center><math>\begin{align} p_0(x) &= 1, \\ | ||
p_j(x) &= (x-\bar x_0)(x-\bar x_1)\cdots (x-\bar x_{j-1}), | p_j(x) &= (x-\bar x_0)(x-\bar x_1)\cdots (x-\bar x_{j-1}), | ||
\qquad 1\le j\le n. | \qquad 1\le j\le n. | ||
\ | \end{align}</math></center> | ||
Uogólnimy również pojęcie różnicy dzielonej na węzły | Uogólnimy również pojęcie różnicy dzielonej na węzły | ||
powtarzające się, kładąc | powtarzające się, kładąc | ||
<center><math> | <center><math>f(\bar x_i,\bar x_{i+1},\ldots,\bar x_j)\,=\, | ||
\frac{f^{(j-i)}(\bar x_i)}{(j-i)!} | \frac{f^{(j-i)}(\bar x_i)}{(j-i)!} | ||
</math></center> | </math></center> | ||
dla <math> | dla <math>\bar x_i=\bar x_{i+1}=\cdots=\bar x_j</math>, oraz | ||
<center><math> | <center><math>f(\bar x_i,\bar x_{i+1},\ldots,\bar x_j)\,=\,\frac | ||
{f(\bar x_{i+1},\ldots,\bar x_j)-f(\bar x_i,\ldots,x_{j-1})} | {f(\bar x_{i+1},\ldots,\bar x_j)-f(\bar x_i,\ldots,x_{j-1})} | ||
{\bar x_j-\bar x_i} | {\bar x_j-\bar x_i} | ||
</math></center> | </math></center> | ||
dla <math> | dla <math>\bar x_i\ne\bar x_j</math>. Zauważmy, że przy tej definicji | ||
różnice <math> | różnice <math>f(\bar x_i,\ldots,\bar x_j)</math> możemy łatwo obliczyć | ||
stosując schemat podobny do tego z przypadku węzłów jednokrotnych. | stosując schemat podobny do tego z przypadku węzłów jednokrotnych. | ||
{{twierdzenie|O różnicach dzielonych dla interpolacji Hermite'a|O różnicach dzielonych dla interpolacji Hermite'a| | {{twierdzenie|O różnicach dzielonych dla interpolacji Hermite'a|O różnicach dzielonych dla interpolacji Hermite'a| | ||
Współczynniki <math> | Współczynniki <math>b_j</math> wielomianu interpolacyjnego | ||
Hermite'a w bazie Newtona, | Hermite'a w bazie Newtona, | ||
<center><math> | <center><math>w_f(\cdot)\,=\,\sum_{j=0}^n b_jp_j(\cdot)</math>,</center> | ||
</math></center> | |||
dane są przez odpowiednie różnice dzielone, tzn. | dane są przez odpowiednie różnice dzielone, tzn. | ||
<center><math> | <center><math>b_j\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_j),\qquad 0\le j\le n</math></center> | ||
</math></center> | |||
}} | }} | ||
Linia 572: | Linia 544: | ||
{{dowod||| | {{dowod||| | ||
Dowód przeprowadzimy podobnie jak dla węzłów | Dowód przeprowadzimy podobnie jak dla węzłów | ||
jednokrotnych. Niech <math> | jednokrotnych. Niech <math>w_{i,j}\in\Pi_{j-i}</math> oznacza wielomian | ||
interpolacyjny Hermite'a oparty na (być może powtarzających się) | interpolacyjny Hermite'a oparty na (być może powtarzających się) | ||
węzłach <math> | węzłach <math>\bar x_i,\bar x_{i+1},\ldots,\bar x_j</math>. | ||
To znaczy, <math> | To znaczy, <math>w_{i,j}</math> interpoluje <math>f</math> w węzłach <math>x_s</math> takich, że | ||
<math> | <math>x_s</math> występuje w ciągu <math>\bar x_i,\ldots\bar x_j</math>, a jego krotność | ||
jest liczbą powtórzeń <math> | jest liczbą powtórzeń <math>x_s</math> w tym ciągu. | ||
Zauważmy najpierw, że dla <math> | Zauważmy najpierw, że dla <math>\bar x_i\ne\bar x_j</math> zachodzi znany nam | ||
już wzór, | już wzór, | ||
<center><math> | <center><math> | ||
w_{i,j}(x)\,=\,\frac{(x-\bar x_i)w_{i+1,j}(x)\,-\, | w_{i,j}(x)\,=\,\frac{(x-\bar x_i)w_{i+1,j}(x)\,-\, | ||
(x-\bar x_j)w_{i,j-1}(x)} {\bar x_j\,-\,\bar x_i}. | (x-\bar x_j)w_{i,j-1}(x)} {\bar x_j\,-\,\bar x_i}. | ||
</math></center> | </math></center> | ||
Rzeczywiście, oznaczmy przez <math> | Rzeczywiście, oznaczmy przez <math>v(x)</math> prawą stronę powyższej równości. | ||
Dla <math> | Dla <math>k</math> mniejszego od krotności danego węzła <math>x_s</math> | ||
w ciągu <math> | w ciągu <math>\bar x_i,\ldots\bar x_j</math>, mamy | ||
<math> | <math>w_{i+1,j}^{(k-1)}(x_s)=w_{i,j-1}^{(k-1)}(x_s)</math>, a ponieważ | ||
<center><math>\ | <center><math>\begin{align} 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 +\, | {\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)} | \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}, | {\bar x_j-\bar x_i}, | ||
\ | \end{align}</math></center> | ||
to | to | ||
<center><math> | <center><math>v^{(k)}(x_s) \,=\, | ||
\frac{(x_s-\bar x_i)w_{i+1,j}^{(k)}(x_s)- | \frac{(x_s-\bar x_i)w_{i+1,j}^{(k)}(x_s)- | ||
(x_s-\bar x_j)w_{i,j-1}^{(k)}(x_s)} {\bar x_j-\bar x_i}. | (x_s-\bar x_j)w_{i,j-1}^{(k)}(x_s)} {\bar x_j-\bar x_i}. | ||
</math></center> | </math></center> | ||
Korzystając z tego wzoru sprawdzamy, że <math> | Korzystając z tego wzoru sprawdzamy, że <math>v</math> spełnia odpowiednie | ||
warunki interpolacyjne, a stąd <math> | warunki interpolacyjne, a stąd <math>w_{i,j}=v</math>. | ||
Dalej postępujemy indukcyjnie ze względu na <math> | Dalej postępujemy indukcyjnie ze względu na <math>n</math>. Dla <math>n=0</math> | ||
mamy <math> | mamy <math>b_0=f(x_0)</math>. Dla <math>n\ge 1</math> wystarczy pokazać, że | ||
<math> | <math>b_n\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_n)</math>. W tym celu | ||
rozpatrzymy dwa przypadki. | rozpatrzymy dwa przypadki. | ||
Jeśli <math> | Jeśli <math>\bar x_0=\bar x_n</math>, to mamy jeden węzeł <math>x_0</math> | ||
o krotności <math> | o krotności <math>n+1</math>. Wielomian interpolacyjny jest wtedy postaci | ||
<center><math> | <center><math>w_f(x)\,=\,\sum_{j=0}^n \frac{f^{(j)}(x_0)}{j!}(x-x_0)^j</math>,</center> | ||
</math></center> | |||
a stąd <math> | a stąd <math>b_n=f^{(n)}(x_0)/(n!)=f(\underbrace{x_0,\ldots,x_0}_{n+1})</math>. | ||
Jeśli zaś <math> | Jeśli zaś <math>\bar x_0\ne\bar x_j</math>, to równość | ||
<math> | <math>b_n\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_n)</math> wynika z wcześniej | ||
wyprowadzonych wzorów oraz z założenia indukcyjnego. | wyprowadzonych wzorów oraz z założenia indukcyjnego. | ||
}} | }} | ||
Linia 631: | Linia 602: | ||
Zauważmy, ze pojęcie różnicy dzielonej | Zauważmy, ze pojęcie różnicy dzielonej | ||
formalnie zdefiniowaliśmy jedynie dla ciągu węzłów postaci | formalnie zdefiniowaliśmy jedynie dla ciągu węzłów postaci | ||
<math> | <math>x_0,\ldots,x_0,x_1,\ldots,x_1,\ldots,x_k,\ldots,x_k</math>, gdzie | ||
<math> | <math>x_j</math> są parami różne. Tą definicję można rozszerzyć do | ||
dowolnego ciągu węzłów. Można bowiem powiedzieć, że | dowolnego ciągu węzłów. Można bowiem powiedzieć, że | ||
<math> | <math>f(t_0,t_1,\ldots,t_n)</math> jest współczynnikiem przy <math>x^n</math> wielomianu | ||
<math> | <math>w_{t_0,\ldots,t_n}\in\Pi_n</math> interpolującego <math>f</math> w węzłach <math>t_j</math> | ||
(uwzględniając krotności). Równoważnie, | (uwzględniając krotności). Równoważnie, | ||
<center><math> | <center><math>f(t_0,t_1,\ldots,t_n)\,=\,\frac{w^{(n)}_{t_0,\ldots,t_n}}{n!}</math></center> | ||
</math></center> | |||
</div></div> | </div></div> | ||
Linia 656: | Linia 626: | ||
przy tym, aby błąd aproksymacji był możliwie mały. | przy tym, aby błąd aproksymacji był możliwie mały. | ||
Podobnie ma się sprawa w przypadku implementacji funkcji elementarnych (<math> | Podobnie ma się sprawa w przypadku implementacji funkcji elementarnych (<math>\sin, \exp, ..</math>.) w bibliotece funkcji matematycznych, czy wręcz w procesorze. Tam również najchętniej poszukiwalibyśmy sposobu taniego przybliżenia wartości dokładnej funkcji. I rzeczywiście, często w tym celu stosuje się m.in. specjalnie konstruowaną aproksymację wielomianową. | ||
Z tego punktu widzenia, intepolacja wielomianowa może być | Z tego punktu widzenia, intepolacja wielomianowa może być | ||
Linia 663: | Linia 633: | ||
o błąd takiej aproksymacji. | o błąd takiej aproksymacji. | ||
Niech <math> | Niech <math>x_0,x_1,\ldots,x_n</math> będą (niekoniecznie różnymi) | ||
węzłami należącymi do pewnego (być może nieskończonego) | węzłami należącymi do pewnego (być może nieskończonego) | ||
przedziału <math> | przedziału <math>D\subset R</math>. Dla danej funkcji <math>f:D\to R</math>, przez | ||
<math> | <math>w_f</math> rozważamy, tak jak w całym wykładzie, wielomian | ||
interpolacyjny stopnia co najwyżej <math> | interpolacyjny stopnia co najwyżej <math>n</math> interpolujący <math>f</math> | ||
w zadanych węzłach. W przypadku węzłów wielokrotnych | 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, | jest to oczywiście wielomian interpolacyjny Hermite'a; gdy węzły są jednokrotne, | ||
Linia 675: | Linia 645: | ||
Dla dowolnego punktu | Dla dowolnego punktu | ||
<math> | <math>\bar x\in D</math> błąd interpolacji w <math>\bar x</math> wyraża się | ||
wzorem | wzorem | ||
<center><math> | <center><math> | ||
f(\bar x)-w_f(\bar x)\,=\,(\bar x-x_0)(\bar x-x_1) | f(\bar x)-w_f(\bar x)\,=\,(\bar x-x_0)(\bar x-x_1) | ||
\cdots(\bar x-x_n)f(x_0,x_1,\ldots,x_n,\bar x) | \cdots(\bar x-x_n)f(x_0,x_1,\ldots,x_n,\bar x)</math></center> | ||
</math></center> | |||
Jeśli ponadto <math> | Jeśli ponadto <math>f\in C^{(n+1)}(D)</math>, czyli pochodna | ||
<math> | <math>f^{(n+1)}</math> w <math>D</math> istnieje i jest ciągła, to | ||
<center><math> | <center><math>f(\bar x)-w_f(\bar x)\,=\,(\bar x-x_0)(\bar x-x_1) | ||
\cdots(\bar x-x_n)\frac{f^{(n+1)}(\xi)}{(n+1)!}, | \cdots(\bar x-x_n)\frac{f^{(n+1)}(\xi)}{(n+1)!}, | ||
</math></center> | </math></center> | ||
gdzie <math> | gdzie <math>\xi=\xi(\bar x)</math> jest pewnym punktem należącym do | ||
najmniejszego przedziału zawierającego punkty | najmniejszego przedziału zawierającego punkty | ||
<math> | <math>x_0,x_1,\ldots,x_n,\bar x</math>. | ||
}} | }} | ||
{{dowod||| | {{dowod||| | ||
Możemy założyć, że <math> | Możemy założyć, że <math>\bar x</math> nie jest | ||
żadnym z węzłów <math> | żadnym z węzłów <math>x_j</math>, <math>0\le j\le n</math>. Niech | ||
<math> | <math>\bar w_f\in\Pi_{n+1}</math> będzie wielomianem interpolacyjnym | ||
funkcji <math> | funkcji <math>f</math> opartym na węzłach <math>x_0,\ldots,x_n</math> i dodatkowo | ||
na węźle <math> | na węźle <math>\bar x</math>. Mamy wtedy | ||
<center><math> | <center><math>\bar w_f(x)\,=\,w_f(x)\,+\,(x-x_0)(x-x_1)\cdots(x-x_n) | ||
f(x_0,x_1,\ldots,x_n,\bar x), | f(x_0,x_1,\ldots,x_n,\bar x), | ||
</math></center> | </math></center> | ||
a ponieważ z warunku interpolacyjnego | a ponieważ z warunku interpolacyjnego | ||
<math> | <math>f(\bar x)=\bar w_f(\bar x)</math>, to mamy też pierwszą równość w lemacie. | ||
Aby pokazać drugą część lematu, rozpatrzmy funkcję | Aby pokazać drugą część lematu, rozpatrzmy funkcję | ||
<math> | <math>\psi:D\to R</math>, | ||
<center><math>\ | <center><math>\begin{align} \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)-w_f(x)-(x-x_0)(x-x_1)\cdots(x-x_n) | ||
f(x_0,\ldots,x_n,\bar x). | f(x_0,\ldots,x_n,\bar x). | ||
\ | \end{align}</math></center> | ||
Z warunków interpolacyjnych na <math> | Z warunków interpolacyjnych na <math>\bar w_f\in\Pi_{n+1}</math> | ||
wynika, że funkcja <math> | wynika, że funkcja <math>\psi</math> ma punkty zerowe o łącznej | ||
krotności co najmniej <math> | krotności co najmniej <math>n+2</math>. Wykorzystując twierdzenie | ||
Rolle'a wnioskujemy stąd, że <math> | Rolle'a wnioskujemy stąd, że <math>\psi'</math> ma zera o łącznej | ||
krotności co najmniej <math> | krotności co najmniej <math>n+1</math>, <math>\psi''</math> ma zera o łącznej | ||
krotności co najmniej <math> | krotności co najmniej <math>n</math>, itd. W końcu funkcja | ||
<math> | <math>\psi^{(n+1)}</math> zeruje się w co najmniej jednym punkcie | ||
<math> | <math>\xi=\xi(\bar x)</math> należącym do najmniejszego przedziału | ||
zawierającego <math> | zawierającego <math>x_0,x_1,\ldots,x_n,\bar x</math>. Wobec tego, że | ||
<math> | <math>w_f^{(n+1)}\equiv 0</math>, a <math>(n+1)</math>-sza pochodna wielomianu | ||
<math> | <math>(x-x_0)\cdots(x-x_n)</math> wynosi <math>(n+1)!</math>, mamy | ||
<center><math> | <center><math>0 \,=\, \psi^{(n+1)}(\xi)\,=\,f^{(n+1)}(\xi)-(n+1)! | ||
f(x_0,\ldots,x_n,\bar x) | f(x_0,\ldots,x_n,\bar x)</math></center> | ||
</math></center> | |||
Stąd | Stąd | ||
<center><math> | <center><math>f(x_0,x_1,\ldots,x_n,\bar x)\,=\, | ||
\frac{f^{(n+1)}(\xi)}{(n+1)!}, | \frac{f^{(n+1)}(\xi)}{(n+1)!}, | ||
</math></center> | </math></center> | ||
Linia 742: | Linia 710: | ||
Zwykle interesuje nas nie tyle błąd w ustalonym punkcie | Zwykle interesuje nas nie tyle błąd w ustalonym punkcie | ||
<math> | <math>\bar x\in D</math>, ale na całym przedziale <math>D</math>. Zakładając | ||
teraz, że przedział <math> | teraz, że przedział <math>D</math> jest domknięty, czyli | ||
<center><math> | <center><math>D\,=\,[a,b] | ||
</math></center> | </math></center> | ||
dla pewnych <math> | dla pewnych <math>-\infty<a<b<+\infty</math>, błąd ten będziemy | ||
mierzyć w normie <strong>jednostajnej</strong> (Czebyszewa). Dla | mierzyć w normie <strong>jednostajnej</strong> (Czebyszewa). Dla | ||
funkcji ciągłej <math> | funkcji ciągłej <math>g:[a,b]\to R</math>, norma ta jest zdefiniowana | ||
jako | jako | ||
<center><math> | <center><math>\|g\|_{ C([a,b])}\,=\,\max_{x\in D} |g(x)|</math></center> | ||
</math></center> | |||
Niech <math> | Niech <math>F^r_M([a,b])</math>, gdzie <math>r\ge 0</math>, będzie klasą funkcji | ||
<center><math> | <center><math>F^r_M([a,b])\,=\,\{\,f\in C^{(r+1)}([a,b]):\, | ||
\|f^{(r+1)}\|_{ C([a,b])}\le M\,\}, | \|f^{(r+1)}\|_{ C([a,b])}\le M\,\}, | ||
</math></center> | </math></center> | ||
gdzie <math> | gdzie <math>0<M<\infty</math>. Mamy następujące twiedzenie. | ||
{{twierdzenie|O najgorszym możliwym błędzie interpolacji w klasie|O najgorszym możliwym błędzie interpolacji w klasie| | {{twierdzenie|O najgorszym możliwym błędzie interpolacji w klasie|O najgorszym możliwym błędzie interpolacji w klasie| | ||
Załóżmy, że każdą funkcję | Załóżmy, że każdą funkcję | ||
<math> | <math>f\in F^r_M([a,b])</math> aproksymujemy jej wielomianem | ||
interpolacyjnym <math> | interpolacyjnym <math>w_f\in\Pi_r</math> opartym na <math>r+1</math> | ||
węzłach <math> | węzłach <math>x_0,\ldots,x_r\in [a,b]</math>. Wtedy maksymalny | ||
błąd takiej aproksymacji wynosi | błąd takiej aproksymacji wynosi | ||
<center><math>\ | <center><math>\begin{align} 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])} \\ | \max_{f\in F^r_M([a,b])} \|f-w_f\|_{ C([a,b])} \\ | ||
&= \frac M{(r+1)!}\cdot | &= \frac M{(r+1)!}\cdot | ||
\max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|. | \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|. | ||
\ | \end{align}</math></center> | ||
}} | }} | ||
Linia 782: | Linia 749: | ||
{{dowod||| | {{dowod||| | ||
Oszacowanie górne wynika bezpośrednio | Oszacowanie górne wynika bezpośrednio | ||
z lematu o postaci błędu interpolacji, bowiem dla <math> | z lematu o postaci błędu interpolacji, bowiem dla <math>f\in F^r_M([a,b])</math> mamy | ||
<center><math>\ | <center><math>\begin{align} \|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)| | &= \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)| | ||
\frac{|f^{(r+1)}(\xi(x))|}{(r+1)!} \\ | \frac{|f^{(r+1)}(\xi(x))|}{(r+1)!} \\ | ||
&\le & \frac{M}{(r+1)!}\max_{x\in D}|(x-x_0)\cdots(x-x_r)|. | &\le & \frac{M}{(r+1)!}\max_{x\in D}|(x-x_0)\cdots(x-x_r)|. | ||
\ | \end{align}</math></center> | ||
Z drugiej strony zauważmy, że dla wielomianu | Z drugiej strony zauważmy, że dla wielomianu | ||
<math> | <math>v(x)=M\frac{x^{r+1}}{(r+1)!}</math> mamy <math>v\in F^r_M([a,b])</math> oraz | ||
<center><math> | <center><math>\|v-w_v\|_{ C([a,b])}\,=\,\frac M{(r+1)!}\cdot | ||
\max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|, | \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|, | ||
</math></center> | </math></center> | ||
Linia 799: | Linia 766: | ||
co kończy dowód.}} | co kończy dowód.}} | ||
===Zjawisko Rungego=== | ===Zjawisko Rungego i dobór węzłów interpolacji=== | ||
Rozważmy zadanie interpolacji funkcji | Rozważmy zadanie interpolacji funkcji | ||
<center><math> | <center><math>f(x) = \frac{1}{1+x^2} | ||
</math></center> | </math></center> | ||
w <math> | w <math>N</math> równoodległych węzłach na przedziale <math>[-5,5]</math>. Okazuje się, że dla dużych wartości <math>N</math>, wielomian interpolacyjny ma poważne kłopoty z aproksymacją tej funkcji przy krańcach przedziału: | ||
[[Image:MNrunge17rowno.png|thumb|550px|center|Zjawisko Rungego: interpolacja w <math> | [[Image:MNrunge17rowno.png|thumb|550px|center|Zjawisko Rungego: interpolacja w <math>N=17</math> węzłach równoodległych dla <math>f(x) = \frac{1}{1+x^2}</math>]] | ||
Z kolei wielomian oparty na [[#O optymalnym doborze węzłów|węzłach Czebyszewa]] znacznie lepiej przybliża tę funkcję. | Z kolei wielomian oparty na [[#O optymalnym doborze węzłów|węzłach Czebyszewa]] znacznie lepiej przybliża tę funkcję. | ||
Linia 818: | Linia 785: | ||
[[Image:MNrunge17czeby.png|thumb|550px|center|Zjawisko Rungego: interpolacja w węzłach Czebyszewa]] | [[Image:MNrunge17czeby.png|thumb|550px|center|Zjawisko Rungego: interpolacja w węzłach Czebyszewa]] | ||
Wiąże się to z zachowaniem się samych wielomianów bazowych: wielomiany oparte na węzłach równoodległych właśnie silnie oscylują w pobliżu krańców przedziału (jasne: nasz wielomian jest wysokiego stopnia, musi mieć dużo zer, a z drugiej strony, jako wielomian wysokiego stopnia, chce szybko uciec do nieskończoności, dlatego "wije się" jak może). Natomiast wielomiany bazowe oparte na węzłach Czebyszewa są | Wiąże się to z zachowaniem się samych wielomianów bazowych: wielomiany oparte na węzłach równoodległych właśnie silnie oscylują w pobliżu krańców przedziału (jasne: nasz wielomian jest wysokiego stopnia, musi mieć dużo zer, a z drugiej strony, jako wielomian wysokiego stopnia, chce szybko uciec do nieskończoności, dlatego "wije się" jak może). Natomiast wielomiany bazowe oparte na węzłach Czebyszewa są [[#O minimaksie|najspokojniejsze]]: wiją się, ale z umiarem, bo zagęszczone przy krańcach węzły skutecznie je "duszą". | ||
Zauważmy, że błąd aproksymacji | Zauważmy, że błąd aproksymacji | ||
<math> | <math>e(F^r_M([a,b]);x_0,\ldots,x_r)</math> w istotny sposób | ||
zależy od wyboru węzłów <math> | zależy od wyboru węzłów <math>x_j</math>. Naturalne jest więc | ||
teraz następujące pytanie: w których punktach <math> | teraz następujące pytanie: w których punktach <math>x_j</math> | ||
przedziału <math> | przedziału <math>[a,b]</math> należy obliczać wartości funkcji, | ||
aby błąd był minimalny? Problem ten sprowadza się | aby błąd był minimalny? Problem ten sprowadza się | ||
oczywiście do minimalizacji wielkości | oczywiście do minimalizacji wielkości | ||
<math> | <math>\max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|</math> | ||
względem węzłów <math> | względem węzłów <math>x_j</math>. | ||
{{twierdzenie|O optymalnym doborze węzłów|O optymalnym doborze węzłów| | {{twierdzenie|O optymalnym doborze węzłów|O optymalnym doborze węzłów| | ||
Błąd aproksymacji w klasie funkcji <math> | Błąd aproksymacji w klasie funkcji <math>F^r_M([a,b])(x_0,\ldots,x_r)</math> | ||
jest minimalny gdy węzły interpolacji są zadane jako <strong>węzły Czebyszewa</strong> na <math> | jest minimalny gdy węzły interpolacji są zadane jako <strong>węzły Czebyszewa</strong> na <math>(a,b)</math>, tzn. | ||
<center><math> | <center><math>x_j^*\,=\,\frac{b-a}2\cdot | ||
\cos\left(\frac{2j+1}{2r+2}\pi\right)\,+\, | \cos\left(\frac{2j+1}{2r+2}\pi\right)\,+\, | ||
\frac{a+b}2,\qquad 0\le j\le r | \frac{a+b}2,\qquad 0\le j\le r</math></center> | ||
</math></center> | |||
Ponadto, dla optymalnych węzłów <math> | Ponadto, dla optymalnych węzłów <math>x_j^*</math> mamy | ||
<center><math> | <center><math>e(F_M^r([a,b]);x_0^*,\ldots,x_r^*)\,=\, | ||
\frac{2M}{(r+1)!}\left(\frac{b-a}4\right)^{r+1} | \frac{2M}{(r+1)!}\left(\frac{b-a}4\right)^{r+1}</math></center> | ||
</math></center> | |||
}} | }} | ||
Linia 851: | Linia 816: | ||
Dowód tego twierdzenia opiera się na własnościach | Dowód tego twierdzenia opiera się na własnościach | ||
pewnego ważnego ciągu wielomianów, który teraz | pewnego ważnego ciągu wielomianów, który teraz | ||
przedstawimy. | przedstawimy. | ||
==Wielomiany Czebyszewa== | ==Wielomiany Czebyszewa== | ||
Ciąg <math> | Ciąg <math>\{T_k\}_{k\ge 0}</math> <strong>wielomianów Czebyszewa</strong> | ||
(pierwszego rodzaju) zdefiniowany jest indukcyjnie jako | (pierwszego rodzaju) zdefiniowany jest indukcyjnie jako | ||
<center><math>\ | <center><math>\begin{align} T_0(x) &= 1, \\ | ||
T_1(x) &= x, \\ | T_1(x) &= x, \\ | ||
T_{k+1}(x) &= 2xT_k(x)-T_{k-1}(x),\qquad | T_{k+1}(x) &= 2xT_k(x)-T_{k-1}(x),\qquad | ||
\mbox{ dla } \quad k\ge 1. | \mbox{ dla } \quad k\ge 1. | ||
\ | \end{align}</math></center> | ||
[[grafika:Czebyszew.jpg|thumb|right||Pafnutij Lwowicz Czebyszew<br> [[Biografia Czebyszew|Zobacz biografię]]]] | [[grafika:Czebyszew.jpg|thumb|right||Pafnutij Lwowicz Czebyszew<br> [[Biografia Czebyszew|Zobacz biografię]]]] | ||
Zauważmy, że <math> | Zauważmy, że <math>T_k</math> jest wielomianem stopnia dokładnie | ||
<math> | <math>k</math> o współczynniku przy <math>x^k</math> równym <math>2^{k-1}</math> | ||
(<math> | (<math>k\ge 1</math>). Ponadto wielomian <math>T_k</math> można dla <math>|x|\le 1</math> | ||
przedstawić w postaci | przedstawić w postaci | ||
<center><math> | <center><math> | ||
T_k(x)\,=\,\cos(k\arccos x) | T_k(x)\,=\,\cos(k\arccos x)</math></center> | ||
</math></center> | |||
Rzeczywiście, łatwo sprawdzić, że jest to prawdą dla | Rzeczywiście, łatwo sprawdzić, że jest to prawdą dla | ||
<math> | <math>k=0,1</math>. Stosując podstawienie <math>\cos t=x</math>, <math>0\le t\le\pi</math>, | ||
oraz wzór na sumę cosinusów otrzymujemy dla <math> | oraz wzór na sumę cosinusów otrzymujemy dla <math>k\ge 1</math> | ||
<center><math> | <center><math>\cos((k+1)t)\,=\,2\cdot\cos t\cos(kt)\,-\,\cos((k-1)t)</math>,</center> | ||
</math></center> | |||
co jest równoważne formule rekurencyjnej dla <math> | co jest równoważne formule rekurencyjnej dla <math>T_{k+1}</math>. | ||
[[Image:MNczebyszew.png|thumb|550px|center|Kilka pierwszych wielomianów Czebyszewa na odcinku <math> | [[Image:MNczebyszew.png|thumb|550px|center|Kilka pierwszych wielomianów Czebyszewa na odcinku <math>[-1,1]</math>]] | ||
Ze wzoru <math> | Ze wzoru <math>T_k(x) = \cos(k\arccos x)</math> wynikają również inne ważne | ||
własności wielomianów Czebyszewa. Norma wielomianu | własności wielomianów Czebyszewa. Norma wielomianu | ||
Czebyszewa na <math> | Czebyszewa na <math>[-1,1]</math> wynosi | ||
<center><math> | <center><math>\|T_k\|_{ C([-1,1])}\,=\,\max_{-1\le x\le 1} |T_k(x)| | ||
\,=\,1 | \,=\,1 | ||
</math></center> | </math></center> | ||
i jest osiągana w <math> | i jest osiągana w <math>k+1</math> punktach tego przedziału równych | ||
<center><math> | <center><math> | ||
y_j\,=\,\cos\Big(\frac jk\pi\Big),\qquad 0\le j\le k | y_j\,=\,\cos\Big(\frac jk\pi\Big),\qquad 0\le j\le k</math>,</center> | ||
</math></center> | |||
przy czym <math> | przy czym <math>T_k(y_j)=(-1)^j</math>. | ||
W końcu, <math> | W końcu, <math>k</math>-ty wielomian Czebyszewa <math>T_k</math> ma dokładnie | ||
<math> | <math>k</math> pojedynczych zer w <math>[-1,1]</math> równych | ||
<center><math> | <center><math>z_j\,=\,\cos\Big(\frac{2j+1}{2r}\pi\Big), | ||
\qquad 0\le j\le k-1 | \qquad 0\le j\le k-1</math></center> | ||
</math></center> | |||
Miejsca zerowe wielomianu Czebyszewa będziemy nazywać <strong>węzłami Czebyszewa</strong>. | Miejsca zerowe wielomianu Czebyszewa będziemy nazywać <strong>węzłami Czebyszewa</strong>. | ||
Linia 913: | Linia 874: | ||
wielomianów Czebyszewa. | wielomianów Czebyszewa. | ||
Przez <math> | Przez <math>\overline{\Pi}_k</math> oznaczymy klasę wielomianów | ||
stopnia <math> | stopnia <math>k</math> o współczynniku wiodącym równym <math>1</math>, tzn. | ||
<center><math> | <center><math>\overline{\Pi}_k\,=\,\{\,w\in\Pi_k:\, | ||
w(x)=x^k+\cdots\,\} | w(x)=x^k+\cdots\,\}</math></center> | ||
</math></center> | |||
{{twierdzenie|O minimaksie|O minimaksie| | {{twierdzenie|O minimaksie|O minimaksie| | ||
Niech <math> | Niech <math>k\ge 1</math>. W klasie | ||
<math> | <math>\overline{\Pi}_k</math> minimalną normę jednostajną na | ||
przedziale <math> | przedziale <math>[-1,1]</math> ma wielomian <math>w^*=2^{1-k}T_k</math>, tzn. | ||
<center><math> | <center><math>\min_{w\in\overline{\Pi}_k}\|w\|_{C([-1,1])}\,=\, | ||
\|w^*\|_{C([-1,1])}\,=\,\frac 1{2^{k-1}} | \|w^*\|_{C([-1,1])}\,=\,\frac 1{2^{k-1}}</math></center> | ||
</math></center> | |||
}} | }} | ||
Linia 940: | Linia 899: | ||
{{dowod||| | {{dowod||| | ||
Zauważmy najpierw, że | Zauważmy najpierw, że | ||
<math> | <math>w^*\in\overline\Pi_k</math> oraz <math>\|w^*\|_{C([-1,1])}=2^{1-k}</math>. | ||
Wystarczy więc pokazać, że norma każdego wielomianu | Wystarczy więc pokazać, że norma każdego wielomianu | ||
z <math> | z <math>\overline\Pi_k</math> jest nie mniejsza niż <math>2^{1-k}</math>. | ||
Załóżmy, że jest przeciwnie, tzn. istnieje wielomian | Załóżmy, że jest przeciwnie, tzn. istnieje wielomian | ||
<math> | <math>w\in\overline\Pi_k</math> taki, że | ||
<center><math> | <center><math>\|w\|_{C([-1,1])}\,<\,\frac 1{2^{k-1}}\,=\, | ||
\|w^*\|_{C([-1,1])}. | \|w^*\|_{C([-1,1])}. | ||
</math></center> | </math></center> | ||
Rozpatrzmy funkcję <math> | Rozpatrzmy funkcję <math>\psi=w^*-w</math>. Ponieważ dla punktów | ||
"maksymalnych" zdefiniowanych w ([[##maxmm|Uzupelnic: maxmm ]]) mamy | "maksymalnych" zdefiniowanych w ([[##maxmm|Uzupelnic: maxmm ]]) mamy | ||
<math> | <math>w^*(y_{k-j})=(-1)^j2^{1-k}</math> oraz <math>|w(y_{k-j})|<2^{1-k}</math>, | ||
to | to | ||
<center><math> | <center><math>\psi(y_{k-j})\,\left\{\,\begin{array} {ll} | ||
> 0 &\quad j\mbox{-parzyste}, \\ | > 0 &\quad j\mbox{-parzyste}, \\ | ||
< 0 &\quad j\mbox{-nieparzyste}. | < 0 &\quad j\mbox{-nieparzyste}. | ||
\end{array} \right | \end{array} \right</math></center> | ||
</math></center> | |||
<math> | <math>0\le j\le k</math>. | ||
Stąd <math> | Stąd <math>\psi</math> ma co najmniej jedno zero w każdym z | ||
przedziałów <math> | przedziałów <math>(y_i,y_{i+1})</math> dla <math>0\le i\le k-1</math>, czyli | ||
w sumie <math> | w sumie <math>k</math> zer. Z drugiej strony, <math>\psi</math> jest wielomianem | ||
stopnia co najwyżej <math> | stopnia co najwyżej <math>k-1</math> (bo współczynniki przy <math>x^k</math> | ||
w wielomianach <math> | w wielomianach <math>w^*</math> i <math>w</math> redukują się), a więc | ||
<math> | <math>\psi=0</math> i <math>w^*=w</math>. | ||
}} | }} | ||
Linia 977: | Linia 935: | ||
{{dowod||| | {{dowod||| | ||
Dowód wynika teraz bezpośrednio z twierdzenia o minimaksie. Zauważmy bowiem, że | Dowód wynika teraz bezpośrednio z twierdzenia o minimaksie. Zauważmy bowiem, że | ||
wielomian <math> | wielomian <math>(x-x_0)(x-x_1)\cdots(x-x_r)</math> jest w klasie | ||
<math> | <math>\overline\Pi_{r+1}</math>. Stąd dla <math>[a,b]=[-1,1]</math> optymalnymi | ||
węzłami są zera <math> | węzłami są zera <math>z_j</math> wielomianu Czebyszewa, przy których | ||
<center><math> | <center><math>(x-z_0)(x-z_1)\cdots(x-z_r)\,=\,\frac{T_{r+1}(x)}{2^r}</math></center> | ||
</math></center> | |||
Jeśli przedział <math> | Jeśli przedział <math>[a,b]</math> jest inny niż <math>[-1,1]</math>, należy | ||
dokonać liniowej zamiany zmiennych tak, aby przeszedł on na | dokonać liniowej zamiany zmiennych tak, aby przeszedł on na | ||
<math> | <math>[-1,1]</math>. Bezpośrednie sprawdzenie pokazuje, że w klasie | ||
<math> | <math>\overline\Pi_{r+1}</math> minimalną normę Czebyszewa na | ||
przedziale <math> | przedziale <math>[a,b]</math> ma wielomian | ||
<center><math> | <center><math>w_{a,b}^*(x)\,=\,\Big(\frac{b-a}{2}\Big)^{r+1} | ||
w^*\left(\frac{2x-(a+b)}{b-a}\right) | w^*\left(\frac{2x-(a+b)}{b-a}\right)</math></center> | ||
</math></center> | |||
Stąd | Stąd | ||
<center><math> | <center><math>\|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} | \frac 1{2^r}\,=\,2\,\Big(\frac{b-a}{4}\Big)^{r+1} | ||
</math></center> | </math></center> | ||
i węzły <math> | i węzły <math>x^*_j</math> 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. | 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. | ||
Linia 1008: | Linia 964: | ||
{{twierdzenie|Jacksona, o prawie optymalnej interpolacji w węzłach Czebyszewa|Jacksona, o prawie optymalnej interpolacji w węzłach Czebyszewa| | {{twierdzenie|Jacksona, o prawie optymalnej interpolacji w węzłach Czebyszewa|Jacksona, o prawie optymalnej interpolacji w węzłach Czebyszewa| | ||
Dla <math> | Dla <math>f\in C[-1,1]</math>, wielomian interpolacyjny <math>w_f</math> stopnia co najwyżej <math>n</math>, oparty na węzłach Czebyszewa, spełnia | ||
<center><math> | <center><math>||f-w_f||_{C[-1,1]} \leq \left(2+\frac{2}{\pi}\log(n+1)\right) ||f-w_f^*||_{C[-1,1]} | ||
</math></center> | </math></center> | ||
gdzie <math> | gdzie <math>w_f^*</math> jest wielomianem stopnia co najwyżej <math>n</math>, najlepiej aproksymującym <math>f</math> w sensie normy jednostajnej. | ||
}} | }} | ||
Linia 1019: | Linia 975: | ||
{{dowod||| | {{dowod||| | ||
Niech <math> | Niech <math>x_j</math> będą węzłami Czebyszewa. | ||
W oczywisty sposób, | W oczywisty sposób, | ||
<center><math> | <center><math>||f-w_f|| = ||f-w_f^* + w_f^* - w_f|| \leq ||f-w_f^*|| + ||w_f^* - w_f|| | ||
</math></center> | </math></center> | ||
Ponieważ <math> | Ponieważ <math>w_f^* = \sum_j l_j(\cdot) w_f^*(x_j)</math> (dlaczego?), to | ||
<center><math> | <center><math>||w_f^* - w_f|| = ||\sum_j l_j(\cdot) (w_f^*(x_j)-f(x_j))|| \leq ||\sum_j |l_j||| \cdot ||f-w_f^*||</math></center> | ||
</math></center> | |||
Tymczasem <math> | Tymczasem <math>||\sum_j |l_j|||</math> (tak zwana stała Lebesque'a) dla węzłów Czebyszewa ma oszacowanie | ||
, | , | ||
<center><math> | <center><math>||\sum_j |l_j||| \leq \frac{2}{\pi} \log(n+1) + 1</math></center> | ||
</math></center> | |||
Jako ciekawostkę dodajmy, że dla węzłów równoodległych na <math> | Jako ciekawostkę dodajmy, że dla węzłów równoodległych na <math>[-1,1]</math> mamy jedynie | ||
<center><math> | <center><math>||\sum_j |l_j||| \leq \frac{2^n}{n\log n}</math>,</center> | ||
</math></center> | |||
co jeszcze raz potwierdza, że węzły równoodległe zasadniczo nie gwarantują dobrej aproksymacji funkcji w normie jednostajnej. | co jeszcze raz potwierdza, że węzły równoodległe zasadniczo nie gwarantują dobrej aproksymacji funkcji w normie jednostajnej. | ||
Linia 1048: | Linia 1001: | ||
--> | --> | ||
Jeśli więc <math> | Jeśli więc <math>n \leq 5</math>, to wielomian oparty na węzłach Czebyszewa jest co najwyżej 3.02 razy, a gdy <math>n \leq 20</math> --- maksymalnie 4 razy gorszy od optymalnego. Można więc powiedzieć, że jest ''prawie optymalny''. | ||
==Literatura== | ==Literatura== |
Aktualna wersja na dzień 11:15, 12 wrz 2023
Interpolacja wielomianowa
<<< Powrót do strony głównej przedmiotu Metody numeryczne
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. wtedy, gdy trzeba
- 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 i niech będzie pewnym zbiorem funkcji . Niech będzie ustalonym zbiorem parami różnych punktów z , zwanych później węzłami.
Powiemy, że wielomian interpoluje funkcję w węzłach , gdy
Oznaczmy przez przestrzeń liniową wielomianów stopnia co najwyżej o współczynnikach rzeczywistych,
Zadanie znalezienia wielomianu interpolującego zadane wartości nazywamy zadaniem interpolacji Lagrange'a.
Twierdzenie o istnieniu i jednoznaczności zadania interpolacji Lagrange'a
Dla dowolnej funkcji istnieje dokładnie jeden wielomian interpolujący w węzłach , .
Dowód
Wybierzmy w dowolną bazę wielomianów , ,
Wtedy każdy wielomian z można jednoznacznie przedstawić w postaci rozwinięcia względem wybranej bazy. Warunkiem koniecznym i dostatecznym na to, aby wielomian interpolował jest spełnienie układu równań liniowych
z niewiadomymi , który w postaci macierzowej wygląda następująco:
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, , . Istnienie niezerowego rozwiązania byłoby więc równoważne istnieniu niezerowego wielomianu stopnia nie większego od , który miałby różnych zer , co jest niemożliwe.

Zadanie znalezienia dla danej funkcji jej wielomianu interpolacyjnego stopnia co najwyżej jest więc dobrze zdefiniowane, tzn. rozwiązanie istnieje i jest wyznaczone jednoznacznie. Zauważmy, że wielomian interpolacyjny jako taki nie może być wynikiem obliczeń w naszym modelu obliczeniowym. Możemy natomiast wyznaczyć jego współczynniki w wybranej bazie.
Definicja
Niech będzie bazą w przestrzeni wielomianów stopnia co najwyżej . Zadanie interpolacji wielomianowej polega na obliczeniu dla danej funkcji współczynników takich, że wielomian
interpoluje w punktach , .
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 ), układ ten może być albo bardzo łatwy do rozwiązania, albo bardzo trudny. Co więcej, jego rozwiązanie w arytmetyce 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 matematyce, jeden byt może być opisany na wiele równoważnych sposobów. W numeryce, każdy z nich może mieć diametralnie różne własności numeryczne: od odporności na błędy zaokrągleń, po koszt rozwiązania.
Dlatego, optymalizacja algorytmów numerycznych zaczyna się często od wyrażenia tego samego --- inaczej.
W naturalny sposób powstaje więc problem wyboru "wygodnej" bazy w . Rozpatrzymy trzy bazy: Lagrange'a, potęgową i Newtona.
Baza Lagrange'a (kanoniczna)
Zdefiniujmy dla wielomiany
Zauważmy, że każdy z jest stopnia dokładnie oraz
Teraz widać, że wielomiany te stanowią bazę w , którą nazywamy bazą Lagrange'a. Macierz układu zadania interpolacji jest w takim wypadku identycznością i w konsekwencji , . Wielomian interpolacyjny dla funkcji można więc zapisać jako
Koszt kombinatoryczny rozwiązania zadania interpolacji jest przy tym zerowy.
Wzory barycentryczne
Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu interpolacyjnego w punkcie różnym od , . Podstawiając
oraz mamy pierwszy wzór barycentryczny
i ostatecznie dostajemy tzw. drugi wzór barycentryczny na wielomian interpolacyjny,
gdzie . W ostatniej równości wykorzystaliśmy fakt, że , co łatwo widzieć, rozpatrując zadanie interpolacji funkcji . Drugi wzór barycentryczny jest korzystniejszy w implementacji.
Dla wielu układów węzłów, wagi 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
Również dla węzłów Czebyszewa istnieją eleganckie wzory na takie współczynnki.
Można pokazać, że wartość wielomianu iterpolacyjnego obliczona w arytmetyce według pierwszego wzoru barycentrycznego spełnia
gdzie , a więc jest to algorytm numerycznie poprawny. Zachowanie drugiej postaci wzoru barycentrycznego w arytmetyce jest nieco bardziej skomplikowane.
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, , . Jeśli bowiem
to również
co sugeruje zastosowanie następującego schematu Hornera do obliczenia :
Algorytm Algorytm Hornera
<math>v_n = a_n;</math> for (j=n-1; j >= 0 ; j--) <math>v_j\, = \,v_{j+1}\cdot x\,+\,a_j</math>;
Po wykonaniu tego algorytmu . Schemat Hornera wymaga wykonania tylko mnożeń i dodawań. Ma on również głębszy sens, bo jego produktem ubocznym mogą być także wartości pochodnych naszego wielomianu w . Algorytm Hornera okazuje się optymalny. Każdy inny algorytm obliczający dokładną wartość wielomianu, gdy danymi są współczynniki wielomianu, wymaga wykonania co najmniej mnożeń i dodawań. Algorytm Hornera jest też numerycznie poprawny.
Zauważmy jednak, że w przypadku bazy potęgowej macierz 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 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 i ewentualnie jego pochodnych, jest wybór bazy Newtona,
W tym przypadku współczynniki rozwinięcia wielomianu interpolacyjnego będziemy oznaczać przez ,
Zwróćmy od razu uwagę na ważną własność bazy Newtona. Jeśli jest wielomianem interpolacyjnym dla funkcji opartym na węzłach , , to oraz
Wartość możemy obliczyć, stosując prostą modyfikację algorytmu Hornera:
Algorytm Algorytm Hornera dla bazy Newtona
<math>v_n = b_n;</math> for (j=n-1; j >= 0 ; j--) <math>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 opartą na różnych węzłach , gdzie , definiuje się indukcyjnie jako
Zachodzi następujące ważne twierdzenie.
Twierdzenie O różnicach dzielonych
Współczynniki wielomianu interpolacyjnego Newtona dla danej funkcji dane są przez różnice dzielone w węzłach , tzn.
Dowód
Dla , oznaczmy przez wielomian z interpolujący w węzłach . Wtedy ma miejsce następująca równość ():
Aby ją pokazać wystarczy, że prawa strona tej równości, którą oznaczymy przez , przyjmuje wartości dla , . Rzeczywiście, jeśli to
Ponadto
oraz podobnie . Stąd jest wielominem z interpolującym w węzłach , , czyli .
Dalej postępujemy indukcyjnie ze względu na stopień wielomianu interpolacyjnego. Dla mamy oczywiście . Niech . Ponieważ, jak łatwo zauważyć,
z założenia indukcyjnego mamy dla . Aby pokazać podobną równość dla , zauważmy, że
Zauważmy teraz, że jest współczynnikiem przy w wielomianie . Z założenia indukcyjnego wynika, że współczynniki przy w wielomianach i są ilorazami różnicowymi opartymi odpowiednio na węzłach i . Stąd
co kończy dowód.

Różnicę dzieloną można łatwo obliczyć na podstawie wartości , , budując następującą tabelkę:
Zauważmy przy tym, że "po drodze" obliczamy dla wszystkich , a więc w szczególności również interesujące nas różnice dzielone . Stąd i z twierdzenia o różnicach dzielonych wynika algorytm obliczania współczynników wielomianu interpolacyjnego w bazie Newtona. Po wykonaniu następującego algorytmu,
Algorytm Metoda różnic dzielonych
for (j = 0; j <= n; j++) <math>b_j</math> = <math>f(x_j)</math>; for (j = 1; j <= n; j++) for (k = n; k >= j; k--) <math>b_k</math> = <math>(b_k-b_{k-1})/(x_k - x_{k-j})</math>;
współczynniki na końcu algorytmu zawierają wspólczynniki wielomianu interpolacyjnego w bazie Newtona. Czy gdybyś zobaczył ten algorytm na samym początku tego wykładu, zgadłbyś, do czego może służyć?!
Okazuje się, że przy realizacji w algorytmu różnic dzielonych istotną rolę odgrywa porządek węzłów. Można pokazać, że --- o ile węzły są uporządkowane nierosnąco lub niemalejąco --- algorytm liczenia jest numerycznie poprawny ze względu na dane interpolacyjne , a cały algorytm różnic dzielonych daje w arytmetyce współczynniki wielomianu interpolacyjnego, będące niewiekim zaburzeniem wartości dokładnych.
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 rozpatrzyć jej zaburzenie , gdzie , to
gdzie
Znacznie rzadziej rozważa się uwarunkowanie zadania interpolacji ze względu na zaburzenie węzłów. Warto zaznaczyć, że zaburzenie danych interpolacji tylko w jednym punkcie może mieć wpływ na przebieg całego wielomianu interpolacyjnego, co ukazuje poniższy przykład:
Przykład
Pokażemy zmianę kilku bazowych wielomianów Lagrange'a stopnia 10 (dla węzłów równoodległych w ) w sytuacji, gdy trzeci węzeł interpolacji zostanie zaburzony o 0.01.

Jak widać, to lokalne zaburzenie danych może powodować wyraźne globalne zaburzenie całego wielomianu interpolacyjnego (zwróć uwagę na prawy koniec przedziału!).
MATLAB i Octave mają wbudowaną funkcję wyznaczającą wielomian, interpolujący zadane wartości: jeśli x
jest wektorem zawierającym węzłów, a y
--- wektorem zawierającym wartości w węzłach, to
c = polyfit(x,y,N-1);
daje współczynniki wielomianu interpolacyjnego (Ostatni argument jest równy , bo taki powinien być stopień wielomianu interpolacyjnego Lagrange'a!).
Co ciekawe (i budzące trochę zgrozy!) --- wielomian (zarówno w MATLABie, jak w Octave) jest wyznaczany w bazie naturalnej, przez rozwiązanie układu równań z macierzą Vandermonde'a, a więc w sposób najgorszy z możliwych. Nie sądzisz, że czas najwyższy, aby to zmienić? Napisz odpowiedni kod i wyślij do Octave-forge!
Aby teraz wyznaczyć wartości takiego wielomianu w zadanych punktach , także musimy użyć specjalnej funkcji,
Y = polyval(c,X);
Domyślamy się, że implementuje ona algorytm Hornera.
Przykład
Interpolujemy tabelkę
2 | 1 | 0 | |
5 | 2 | 1 |
wielomianem stopnia co najwyżej 2.
Zgodnie z przewidywaniami, otrzymaliśmy wielomian . Wartość tego wielomianu dla rzeczywiście jest równa 10.
A co się stanie, gdy będziemy szukać wielomianu stopnia niższego?
Też "coś" zostało obliczone --- wielomian (jak domyślamy się) . Nie dziwi, że ten wielomian nie jest wielomianem interpolacyjnym (dlaczego?) --- więc czym może być? Okazuje się, że to coś to wielomian nalepiej pasujący do danych w sensie aproksymacji średniokwadratowej, o czym będzie mowa w innym wykładzie.
Warto jeszcze może wiedzieć, że polyfit
można także wywołać dla jeszcze wyższego stopnia wielomianu, jednak, co niespodziewane, wynikiem nie będzie wielomian stopnia 2, uzyskany poprzednio:
Wynika to stąd, że gdy dopuszczalny stopień wielomianu jest wyższy niż wymagany w zadaniu interpolacji Lagrange'a, zadanie interpolacji ma nieskończenie wiele rozwiązań. Funkcja polyfit
wybiera z nich to, które spełnia warunek, że norma euklidesowa wektora współczynników wielomianu jest najmniejsza z możliwych.
Pragnąc wykorzystać interpolację we własnym programie w C, najlepiej samemu zaprogramować bądź drugi wzór barycentryczny, bądź algorytm różnic dzielonych --- w zależności od potrzeb.
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 dane są również ich krotności , , przy czym . Należy skonstruować wielomian taki, że
Oczywiście zakładamy przy tym, że odpowiednie pochodne funkcji istnieją.
Lemat
Zadanie interpolacji Hermite'a ma jednoznaczne rozwiązanie.
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 równań z niewiadomymi, który dla zerowej prawej strony ma jedynie rozwiązanie zerowe. Inaczej bowiem istniałby wielomian niezerowy stopnia nie większego niż , który miałby zera o łącznej krotności większej niż .

Nas oczywiście interesuje konstrukcja wielomianu . W tym celu ustawimy węzły w ciąg
i zdefiniujemy uogólnioną bazę Newtona w jako
Uogólnimy również pojęcie różnicy dzielonej na węzły powtarzające się, kładąc
dla , oraz
dla . Zauważmy, że przy tej definicji różnice możemy łatwo obliczyć stosując schemat podobny do tego z przypadku węzłów jednokrotnych.
Twierdzenie O różnicach dzielonych dla interpolacji Hermite'a
Współczynniki wielomianu interpolacyjnego Hermite'a w bazie Newtona,
dane są przez odpowiednie różnice dzielone, tzn.
Dowód
Dowód przeprowadzimy podobnie jak dla węzłów jednokrotnych. Niech oznacza wielomian interpolacyjny Hermite'a oparty na (być może powtarzających się) węzłach . To znaczy, interpoluje w węzłach takich, że występuje w ciągu , a jego krotność jest liczbą powtórzeń w tym ciągu.
Zauważmy najpierw, że dla zachodzi znany nam już wzór,
Rzeczywiście, oznaczmy przez prawą stronę powyższej równości. Dla mniejszego od krotności danego węzła w ciągu , mamy , a ponieważ
to
Korzystając z tego wzoru sprawdzamy, że spełnia odpowiednie warunki interpolacyjne, a stąd .
Dalej postępujemy indukcyjnie ze względu na . Dla mamy . Dla wystarczy pokazać, że . W tym celu rozpatrzymy dwa przypadki.
Jeśli , to mamy jeden węzeł o krotności . Wielomian interpolacyjny jest wtedy postaci
a stąd . Jeśli zaś , to równość 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 , gdzie są parami różne. Tą definicję można rozszerzyć do dowolnego ciągu węzłów. Można bowiem powiedzieć, że jest współczynnikiem przy wielomianu interpolującego w węzłach (uwzględniając krotności). Równoważnie,
Błąd interpolacji
Gdy mamy do czynienia z funkcją, która jest "skomplikowana", często dobrze jest zastąpić ją funkcją "prostszą". Mówimy wtedy o aproksymacji 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, 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.
Podobnie ma się sprawa w przypadku implementacji funkcji elementarnych (.) w bibliotece funkcji matematycznych, czy wręcz w procesorze. Tam również najchętniej poszukiwalibyśmy sposobu taniego przybliżenia wartości dokładnej funkcji. I rzeczywiście, często w tym celu stosuje się m.in. specjalnie konstruowaną aproksymację wielomianową.
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 będą (niekoniecznie różnymi) węzłami należącymi do pewnego (być może nieskończonego) przedziału . Dla danej funkcji , przez rozważamy, tak jak w całym wykładzie, wielomian interpolacyjny stopnia co najwyżej interpolujący 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 błąd interpolacji w wyraża się wzorem
Jeśli ponadto , czyli pochodna w istnieje i jest ciągła, to
gdzie jest pewnym punktem należącym do najmniejszego przedziału zawierającego punkty .
Dowód
Możemy założyć, że nie jest żadnym z węzłów , . Niech będzie wielomianem interpolacyjnym funkcji opartym na węzłach i dodatkowo na węźle . Mamy wtedy
a ponieważ z warunku interpolacyjnego , to mamy też pierwszą równość w lemacie.
Aby pokazać drugą część lematu, rozpatrzmy funkcję ,
Z warunków interpolacyjnych na wynika, że funkcja ma punkty zerowe o łącznej krotności co najmniej . Wykorzystując twierdzenie Rolle'a wnioskujemy stąd, że ma zera o łącznej krotności co najmniej , ma zera o łącznej krotności co najmniej , itd. W końcu funkcja zeruje się w co najmniej jednym punkcie należącym do najmniejszego przedziału zawierającego . Wobec tego, że , a -sza pochodna wielomianu wynosi , mamy
Stąd

Zwykle interesuje nas nie tyle błąd w ustalonym punkcie , ale na całym przedziale . Zakładając teraz, że przedział jest domknięty, czyli
dla pewnych , błąd ten będziemy mierzyć w normie jednostajnej (Czebyszewa). Dla funkcji ciągłej , norma ta jest zdefiniowana jako
Niech , gdzie , będzie klasą funkcji
gdzie . Mamy następujące twiedzenie.
Twierdzenie O najgorszym możliwym błędzie interpolacji w klasie
Załóżmy, że każdą funkcję aproksymujemy jej wielomianem interpolacyjnym opartym na węzłach . Wtedy maksymalny błąd takiej aproksymacji wynosi
Dowód
Oszacowanie górne wynika bezpośrednio z lematu o postaci błędu interpolacji, bowiem dla mamy
Z drugiej strony zauważmy, że dla wielomianu mamy oraz

Zjawisko Rungego i dobór węzłów interpolacji
Rozważmy zadanie interpolacji funkcji
w równoodległych węzłach na przedziale . Okazuje się, że dla dużych wartości , wielomian interpolacyjny ma poważne kłopoty z aproksymacją tej funkcji przy krańcach przedziału:

Z kolei wielomian oparty na węzłach Czebyszewa znacznie lepiej przybliża tę funkcję.

Rzeczywiście, węzły Czebyszewa zagęszczają się w pobliżu krańców odcinka.

Wiąże się to z zachowaniem się samych wielomianów bazowych: wielomiany oparte na węzłach równoodległych właśnie silnie oscylują w pobliżu krańców przedziału (jasne: nasz wielomian jest wysokiego stopnia, musi mieć dużo zer, a z drugiej strony, jako wielomian wysokiego stopnia, chce szybko uciec do nieskończoności, dlatego "wije się" jak może). Natomiast wielomiany bazowe oparte na węzłach Czebyszewa są najspokojniejsze: wiją się, ale z umiarem, bo zagęszczone przy krańcach węzły skutecznie je "duszą".
Zauważmy, że błąd aproksymacji
w istotny sposób
zależy od wyboru węzłów . Naturalne jest więc
teraz następujące pytanie: w których punktach
przedziału należy obliczać wartości funkcji,
aby błąd był minimalny? Problem ten sprowadza się
oczywiście do minimalizacji wielkości
względem węzłów .
Twierdzenie O optymalnym doborze węzłów
Błąd aproksymacji w klasie funkcji jest minimalny gdy węzły interpolacji są zadane jako węzły Czebyszewa na , tzn.
Ponadto, dla optymalnych węzłów mamy
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 wielomianów Czebyszewa (pierwszego rodzaju) zdefiniowany jest indukcyjnie jako

Zobacz biografię
Zauważmy, że jest wielomianem stopnia dokładnie o współczynniku przy równym (). Ponadto wielomian można dla przedstawić w postaci
Rzeczywiście, łatwo sprawdzić, że jest to prawdą dla . Stosując podstawienie , , oraz wzór na sumę cosinusów otrzymujemy dla
co jest równoważne formule rekurencyjnej dla .

Ze wzoru wynikają również inne ważne własności wielomianów Czebyszewa. Norma wielomianu Czebyszewa na wynosi
i jest osiągana w punktach tego przedziału równych
przy czym .
W końcu, -ty wielomian Czebyszewa ma dokładnie pojedynczych zer w równych
Miejsca zerowe wielomianu Czebyszewa będziemy nazywać węzłami Czebyszewa. Konsekwencją wymienionych własności jest następująca własność ekstremalna wielomianów Czebyszewa.
Przez oznaczymy klasę wielomianów stopnia o współczynniku wiodącym równym , tzn.
Twierdzenie O minimaksie
Niech . W klasie minimalną normę jednostajną na przedziale ma wielomian , tzn.

Możemy teraz przeprowadzić dowód twierdzenia o optymalnym doborze węzłów:
Dowód
Dowód wynika teraz bezpośrednio z twierdzenia o minimaksie. Zauważmy bowiem, że wielomian jest w klasie . Stąd dla optymalnymi węzłami są zera wielomianu Czebyszewa, przy których
Jeśli przedział jest inny niż , należy dokonać liniowej zamiany zmiennych tak, aby przeszedł on na . Bezpośrednie sprawdzenie pokazuje, że w klasie minimalną normę Czebyszewa na przedziale ma wielomian
Stąd

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, o prawie optymalnej interpolacji w węzłach Czebyszewa
Dla , wielomian interpolacyjny stopnia co najwyżej , oparty na węzłach Czebyszewa, spełnia
gdzie jest wielomianem stopnia co najwyżej , najlepiej aproksymującym w sensie normy jednostajnej.
Jeśli więc , to wielomian oparty na węzłach Czebyszewa jest co najwyżej 3.02 razy, a gdy --- maksymalnie 4 razy gorszy od optymalnego. Można więc powiedzieć, że jest prawie optymalny.
Literatura
W celu dogłębnego zapoznania się z omawianym na wykładzie materiałem, przeczytaj rozdział 6.1--6.3 w
- D. Kincaid, W. Cheney Analiza numeryczna, Wydawnictwa Naukowo-Techniczne, Warszawa 2006, ISBN 83-204-3078-X.