MN09: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
 
(Nie pokazano 18 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>\displaystyle w</math> (czerwony) stopnia 6, interpolujący 7 zadanych wartości (zaznaczone na zielono) danej funkcji <math>\displaystyle f</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>\displaystyle D\subsetR</math> i niech <math>\displaystyle F</math> będzie pewnym zbiorem funkcji  
Niech <math>D\subset R</math> i niech <math>F</math> będzie pewnym zbiorem funkcji  
<math>\displaystyle f:D\toR</math>. Niech <math>\displaystyle x_0,x_1,\ldots,x_n</math> będzie ustalonym zbiorem  
<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>\displaystyle D</math>, zwanych później <strong>węzłami</strong>.  
parami różnych punktów z <math>D</math>, zwanych później <strong>węzłami</strong>.  


Powiemy, że wielomian <math>\displaystyle w</math> <strong>interpoluje</strong> funkcję <math>\displaystyle f\in F</math>  
Powiemy, że wielomian <math>w</math> <strong>interpoluje</strong> funkcję <math>f \in F</math>  
w węzłach <math>\displaystyle x_j</math>, gdy  
w węzłach <math>x_j</math>, gdy  


<center><math>\displaystyle w(x_j)\,=\,f(x_j),\qquad 0\le j\le n.
<center><math>w(x_j)\,=\,f(x_j),\qquad 0\le j\le n
</math></center>
</math></center>


Oznaczmy przez <math>\displaystyle \Pi_n</math> przestrzeń liniową wielomianów stopnia  
Oznaczmy przez <math>\Pi_n</math> przestrzeń liniową wielomianów stopnia  
co najwyżej <math>\displaystyle n</math> o współczynnikach rzeczywistych,  
co najwyżej <math>n</math> o współczynnikach rzeczywistych,  


<center><math>\displaystyle \Pi_n\,=\,\{\,w(x)=a_nx^n+a_{n-1}x^{n-1}+\cdots+a_1x+a_0:\;
<center><math>\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\,\}.
       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>\displaystyle f:D\toR</math> istnieje  
Dla dowolnej funkcji <math>f:D \to R</math> istnieje  
dokładnie jeden wielomian <math>\displaystyle w_f\in\Pi_n</math> interpolujący <math>\displaystyle f</math>  
dokładnie jeden wielomian <math>w_f\in\Pi_n</math> interpolujący <math>f</math>  
w węzłach <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n.</math>
w węzłach <math>x_j</math>, <math>0\le j\le n</math>.
}}
}}


{{dowod|||
{{dowod|||
Wybierzmy w <math>\displaystyle \Pi_n</math> dowolną bazę wielomianów  
Wybierzmy w <math>\Pi_n</math> dowolną bazę wielomianów  
<math>\displaystyle \varphi_j</math>, <math>\displaystyle 0\le j\le n</math>,
<math>\varphi_j</math>, <math>0\le j\le n</math>,


<center><math>\displaystyle \Pi_n\,=\, \mbox{span} \{\,\varphi_0,\varphi_1,\ldots,\varphi_n\,\}.
<center><math>\Pi_n\,=\, \mbox{span} \{\,\varphi_0,\varphi_1,\ldots,\varphi_n\,\}</math></center>
</math></center>


Wtedy każdy wielomian z <math>\displaystyle \Pi_n</math> można jednoznacznie przedstawić  
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>\displaystyle w_f(\cdot)=\sum_{j=0}^n c_j\varphi_j(\cdot)</math>
<math>w_f(\cdot)=\sum_{j=0}^n c_j\varphi_j(\cdot)</math>
interpolował <math>\displaystyle f</math> jest spełnienie układu <math>\displaystyle n+1</math> równań liniowych   
interpolował <math>f</math> jest spełnienie układu <math>n+1</math> równań liniowych   


<center><math>\displaystyle \sum_{j=0}^n c_j\varphi_j(x_i)\,=\,f(x_i),\qquad 0\le i\le n,
<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>\displaystyle n+1</math> niewiadomymi <math>\displaystyle c_j</math>, który w postaci macierzowej wygląda  
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>\displaystyle
<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 z geometrią analityczną/Wykład 8: Zastosowania wyznacznika. Układy równań liniowych|wystarczy, aby wektor zerowy był jedynym rozwiązaniem układu jednorodnego]].  
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]].  
Rzeczywiście, układ jednorodny odpowiada interpolacji danych zerowych,  
Rzeczywiście, układ jednorodny odpowiada interpolacji danych zerowych,  
<math>\displaystyle f(x_i)=0</math>, <math>\displaystyle \forall i</math>. Istnienie niezerowego rozwiązania byłoby  
<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>\displaystyle n</math>, który miałby <math>\displaystyle n+1</math> różnych zer <math>\displaystyle x_i</math>, co jest niemożliwe.  
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>\displaystyle f</math> jej wielomianu interpolacyjnego  
Zadanie znalezienia dla danej funkcji <math>f</math> jej wielomianu interpolacyjnego  
stopnia co najwyżej <math>\displaystyle n</math> jest więc dobrze zdefiniowane, tzn. rozwiązanie  
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>\displaystyle w_f</math> jako taki nie może być wynikiem obliczeń w naszym  
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>\displaystyle c_j</math> w wybranej bazie.  
<math>c_j</math> w wybranej bazie.  


{{definicja|||
{{definicja|||
Niech <math>\displaystyle (\varphi_j)_{j=0}^n</math> będzie bazą w przestrzeni  
Niech <math>(\varphi_j)_{j=0}^n</math> będzie bazą w przestrzeni  
<math>\displaystyle \Pi_n</math> wielomianów stopnia co najwyżej <math>\displaystyle n</math>. Zadanie  
<math>\Pi_n</math> wielomianów stopnia co najwyżej <math>n</math>. Zadanie  
interpolacji wielomianowej polega na obliczeniu dla danej funkcji <math>\displaystyle f</math>  
interpolacji wielomianowej polega na obliczeniu dla danej funkcji <math>f</math>  
współczynników <math>\displaystyle c_j</math> takich, że wielomian  
współczynników <math>c_j</math> takich, że wielomian  


<center><math>\displaystyle
<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>\displaystyle f</math> w punktach <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>.  
interpoluje <math>f</math> w punktach <math>x_j</math>, <math>0\le j\le n</math>.  
}}
}}


Linia 110: 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>\displaystyle (\varphi_j)_{j=0}^n</math>), układ
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>\displaystyle fl_\nu</math> może napotykać na większe bądź
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 122: Linia 119:
</blockquote>  
</blockquote>  


W naturalny  sposób powstaje więc problem wyboru "wygodnej" bazy w <math>\displaystyle \Pi_n</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>\displaystyle 0\le j\le n</math> wielomiany  
Zdefiniujmy dla <math>0\le j\le n</math> wielomiany  


<center><math>\displaystyle
<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>\displaystyle l_j</math> jest stopnia dokładnie <math>\displaystyle n</math> oraz
Zauważmy, że każdy z <math>l_j</math> jest stopnia dokładnie <math>n</math> oraz


<center><math>\displaystyle l_j(x_i)\,=\,\left\{\,\begin{array} {ll}               
<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>\displaystyle \Pi_n</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>\displaystyle c_j=f(x_j)</math>, <math>\displaystyle \forall j</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>\displaystyle f</math> można więc  
Wielomian interpolacyjny dla funkcji <math>f</math> można więc  
zapisać jako  
zapisać jako  


<center><math>\displaystyle w_f(x)\,=\,\sum_{j=0}^n f(x_j)l_j(x).
<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 156: Linia 150:


Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu  
Przypuśćmy, że chcielibyśmy obliczyć wartość wielomianu  
interpolacyjnego <math>\displaystyle w_f</math> w punkcie <math>\displaystyle x</math> różnym od <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</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>\displaystyle w_j\,=\,\frac 1 {(x_j-x_0)(x_j-x_1)\cdots(x_j-x_{j-1})
<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>\displaystyle p_n(x)=(x-x_0)\cdots(x-x_n)</math> mamy <strong>pierwszy wzór barycentryczny</strong>
oraz <math>p_n(x)=(x-x_0)\cdots(x-x_n)</math> mamy <strong>pierwszy wzór barycentryczny</strong>


<center><math>\displaystyle
<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>\displaystyle w_f(x)\,=\,\frac{\sum_{j=0}^n q_j(x)f(x_j)}{\sum_{j=0}^n q_j(x)},
<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>\displaystyle q_j(x)=w_j/(x-x_j)</math>. W ostatniej równości wykorzystaliśmy fakt,  
gdzie <math>q_j(x)=w_j/(x-x_j)</math>. W ostatniej równości wykorzystaliśmy fakt,  
że <math>\displaystyle p_n(x)\equiv (\sum_{j=0}^n q_j(x))^{-1}</math>, co  łatwo widzieć, rozpatrując
że <math>p_n(x)\equiv (\sum_{j=0}^n q_j(x))^{-1}</math>, co  łatwo widzieć, rozpatrując
zadanie interpolacji funkcji <math>\displaystyle f\equiv 1</math>. Drugi wzór barycentryczny jest korzystniejszy w implementacji.
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>\displaystyle w_j</math> są zadane jawnymi wzorami, np. dla węzłów
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>\displaystyle w_j = (-1)^j \begin{pmatrix}  n \\ j \end{pmatrix} .
<center><math>w_j = (-1)^j \begin{pmatrix}  n \\ j \end{pmatrix} </math></center>
</math></center>


Również dla [[#O optymalnym doborze węzłów|węzłów Czebyszewa]] istnieją eleganckie wzory na takie współczynnki.
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>\displaystyle \widetilde{w_f(x)}</math> wielomianu iterpolacyjnego obliczona w arytmetyce <math>\displaystyle fl_\nu</math> według pierwszego wzoru barycentrycznego spełnia  
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>\displaystyle
<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>\displaystyle |\epsilon_j| \leq 5(n+1)</math>, a więc jest to algorytm numerycznie poprawny.
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>\displaystyle fl_\nu</math> jest nieco
Zachowanie drugiej postaci wzoru barycentrycznego w arytmetyce <math>fl_\nu</math> jest nieco
bardziej skomplikowane.
bardziej skomplikowane.


Linia 200: 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>\displaystyle \varphi_j(x)=x^j</math>, <math>\displaystyle \forall j</math>. Jeśli bowiem
<strong>bazie potęgowej</strong>, <math>\varphi_j(x)=x^j</math>, <math>\forall j</math>. Jeśli bowiem


<center><math>\displaystyle w_f(x)\,=\,a_0+a_1x+\cdots+ a_nx^n,
<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>\displaystyle w_f(x)\,=\,(\cdots(a_nx+a_{n-1})x+a_{n-2})x+\cdots+a_1)x+a_0,
<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>\displaystyle w_f(x)</math>:  
do obliczenia <math>w_f(x)</math>:  


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


Po wykonaniu tego algorytmu <math>\displaystyle w_f(x)=v_0</math>. Schemat Hornera wymaga wykonania  
Po wykonaniu tego algorytmu <math>w_f(x)=v_0</math>. Schemat Hornera wymaga wykonania  
tylko <math>\displaystyle n</math> mnożeń i <math>\displaystyle n</math> dodawań. Ma on również głębszy sens,  
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>\displaystyle 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>\displaystyle n</math> mnożeń i <math>\displaystyle n</math> dodawań. Algorytm Hornera jest też numerycznie poprawny.
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>\displaystyle (x_i^j)_{i,j=0}^n</math> układu zadania interpolacji jest pełna. Jest to tzw.  
<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>\displaystyle n^3</math> operacji  
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 234: 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>\displaystyle w_f(x)</math> i ewentualnie jego
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>\displaystyle \aligned p_0(x) &= 1, \\
<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.
\endaligned</math></center>
\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>\displaystyle b_j</math>,
będziemy oznaczać przez <math>b_j</math>,


<center><math>\displaystyle w_f\,=\,\sum_{j=0}^n b_jp_j.
<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>\displaystyle w_{f,j}\in\Pi_j</math> jest wielomianem interpolacyjnym dla funkcji <math>\displaystyle f</math> opartym  
<math>w_{f,j}\in\Pi_j</math> jest wielomianem interpolacyjnym dla funkcji <math>f</math> opartym  
na węzłach <math>\displaystyle x_0,x_1,\ldots,x_j</math>, <math>\displaystyle 0\le j\le n</math>, to <math>\displaystyle w_{f,0}=b_0</math> oraz
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>\displaystyle
<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>\displaystyle w_f(x)</math> możemy obliczyć, stosując prostą modyfikację  
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>\displaystyle v_n = b_n;</math>
<pre><math>v_n = b_n;</math>
for (j=n-1; j >= 0 ; j--)
for (j=n-1; j >= 0 ; j--)
<math>\displaystyle v_j\, = \,v_{j+1}\cdot (x-x_j)\,+\,b_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>\displaystyle f</math> opartą na różnych węzłach
<strong>Różnicę dzieloną</strong> funkcji <math>f</math> opartą na różnych węzłach
<math>\displaystyle t_0,t_1,\ldots,t_s</math>, gdzie <math>\displaystyle s\ge 1</math>, definiuje się indukcyjnie jako
<math>t_0,t_1,\ldots,t_s</math>, gdzie <math>s\ge 1</math>, definiuje się indukcyjnie jako


<center><math>\displaystyle
<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 282: Linia 267:
{{twierdzenie|O różnicach dzielonych|O różnicach dzielonych|
{{twierdzenie|O różnicach dzielonych|O różnicach dzielonych|
   
   
Współczynniki <math>\displaystyle b_j</math> wielomianu  
Współczynniki <math>b_j</math> wielomianu  
interpolacyjnego Newtona dla danej funkcji <math>\displaystyle f</math> dane są przez  
interpolacyjnego Newtona dla danej funkcji <math>f</math> dane są przez  
różnice dzielone <math>\displaystyle f</math> w węzłach <math>\displaystyle x_0,x_1,\ldots,x_j</math>, tzn.  
różnice dzielone <math>f</math> w węzłach <math>x_0,x_1,\ldots,x_j</math>, tzn.  


<center><math>\displaystyle b_j\,=\,f(x_0,x_1,\ldots,x_j),\qquad 0\le j\le n.
<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>\displaystyle 0\le i\le j\le n</math>, oznaczmy przez <math>\displaystyle w_{i,j}</math>  
Dla <math>0\le i\le j\le n</math>, oznaczmy przez <math>w_{i,j}</math>  
wielomian z <math>\displaystyle \Pi_{j-i}</math> interpolujący <math>\displaystyle f</math> w węzłach   
wielomian z <math>\Pi_{j-i}</math> interpolujący <math>f</math> w węzłach   
<math>\displaystyle x_i,x_{i+1},\ldots,x_j</math>. Wtedy ma miejsce następująca równość (<math>\displaystyle i<j</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>\displaystyle
<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>\displaystyle v(x)</math>, przyjmuje wartości <math>\displaystyle f(x_s)</math> dla <math>\displaystyle x=x_s</math>,  
oznaczymy przez <math>v(x)</math>, przyjmuje wartości <math>f(x_s)</math> dla <math>x=x_s</math>,  
<math>\displaystyle i\le s\le j</math>. Rzeczywiście, jeśli <math>\displaystyle i+1\le s\le j-1</math> to
<math>i\le s\le j</math>. Rzeczywiście, jeśli <math>i+1\le s\le j-1</math> to


<center><math>\displaystyle v(x_s)\,=\,\frac{(x_s-x_i)f(x_s)-(x_s-x_j)f(x_s)}{x_j-x_i}
<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>\displaystyle v(x_i)\,=\,\frac{-(x_i-x_j)}{x_j-x_i}f(x_i)\,=\,f(x_i),
<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>\displaystyle v(x_j)=f(x_j)</math>. Stąd <math>\displaystyle v</math> jest wielominem  
oraz podobnie <math>v(x_j)=f(x_j)</math>. Stąd <math>v</math> jest wielominem  
z <math>\displaystyle \Pi_{j-i}</math> interpolującym <math>\displaystyle f</math> w węzłach <math>\displaystyle x_s</math>, <math>\displaystyle i\le s\le j</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>\displaystyle w_{i,j}=v</math>.  
czyli <math>w_{i,j}=v</math>.  


Dalej postępujemy indukcyjnie ze względu na stopień <math>\displaystyle n</math>  
Dalej postępujemy indukcyjnie ze względu na stopień <math>n</math>  
wielomianu interpolacyjnego. Dla <math>\displaystyle n=0</math> mamy oczywiście <math>\displaystyle b_0=f(x_0)</math>.  
wielomianu interpolacyjnego. Dla <math>n=0</math> mamy oczywiście <math>b_0=f(x_0)</math>.  
Niech <math>\displaystyle n\ge 1</math>. Ponieważ, jak łatwo zauważyć,  
Niech <math>n\ge 1</math>. Ponieważ, jak łatwo zauważyć,  


<center><math>\displaystyle w_{0,n}(x)\,=\,w_{0,n-1}(x)+b_n p_n(x),
<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>\displaystyle b_j=f(x_0,\ldots,x_j)</math> dla  
z założenia indukcyjnego mamy <math>b_j=f(x_0,\ldots,x_j)</math> dla  
<math>\displaystyle 0\le j\le n-1</math>. Aby pokazać podobną równość dla <math>\displaystyle b_n</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>\displaystyle w_{0,n}(x)\,=\,\frac{(x-x_0)w_{1,n}(x)-(x-x_n)w_{0,n-1}(x)}{x_n-x_0}.
<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>\displaystyle b_n</math> jest współczynnikiem przy <math>\displaystyle x^n</math>  
Zauważmy teraz, że <math>b_n</math> jest współczynnikiem przy <math>x^n</math>  
w wielomianie <math>\displaystyle w_{0,n}</math>. Z założenia indukcyjnego wynika, że  
w wielomianie <math>w_{0,n}</math>. Z założenia indukcyjnego wynika, że  
współczynniki przy <math>\displaystyle x^{n-1}</math> w wielomianach <math>\displaystyle w_{1,n}</math> i <math>\displaystyle w_{0,n-1}</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>\displaystyle x_1,\ldots,x_n</math> i <math>\displaystyle x_0,\ldots,x_{n-1}</math>. Stąd
<math>x_1,\ldots,x_n</math> i <math>x_0,\ldots,x_{n-1}</math>. Stąd


<center><math>\displaystyle b_n\,=\,\frac{f(x_1,\ldots,x_n)-f(x_0,\ldots,x_{n-1})}{x_n-x_0}
<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>\displaystyle f(x_0,x_1,\ldots,x_n)</math> można łatwo  
Różnicę dzieloną <math>f(x_0,x_1,\ldots,x_n)</math> można łatwo  
obliczyć na podstawie wartości <math>\displaystyle f(x_j)</math>, <math>\displaystyle 0\le j\le n</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>\displaystyle \begin{array} {llllll}
<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 358: 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>\displaystyle w</math> interpolującego zestaw punktów <math>\displaystyle (0,2)\displaystyle (1,5)\displaystyle (-1,7)</math> algorytmem różnic dzielonych</div></div></div></div>
<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>\displaystyle f(x_i,x_{i+1},\ldots,x_j)</math> dla wszystkich <math>\displaystyle 0\le i < j\le n</math>, a więc  
<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>\displaystyle f(x_0,x_1,\ldots,x_j)</math>. Stąd i z twierdzenia o różnicach dzielonych
<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>\displaystyle b_j</math> wielomianu interpolacyjnego w bazie Newtona.  
<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>\displaystyle b_j</math> = <math>\displaystyle f(x_j)</math>;  
<math>b_j</math> = <math>f(x_j)</math>;  
for (j = 0; j <= n; j++)
for (j = 1; j <= n; j++)
for (k = n; k >= j; k--)
for (k = n; k >= j; k--)
<math>\displaystyle b_j</math> = <math>\displaystyle (b_k-b_{k-1})/(x_k - x_{k-j})</math>;
<math>b_k</math> = <math>(b_k-b_{k-1})/(x_k - x_{k-j})</math>;
</pre>}}
</pre>}}


współczynniki <math>\displaystyle b_j</math> na końcu algorytmu zawierają wspólczynniki wielomianu
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>\displaystyle w</math>, interpolującego zestaw punktów <math>\displaystyle (0,2)\displaystyle (1,5)\displaystyle (-1,7)</math> algorytmem różnic dzielonych --- wykonanym tym razem ''in situ''.</div></div></div></div>
<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>\displaystyle fl_\nu</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>\displaystyle f(t_0,\ldots,t_n)</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>\displaystyle f(t_j)</math>, a cały algorytm różnic dzielonych daje w arytmetyce <math>\displaystyle fl_\nu</math> współczynniki wielomianu interpolacyjnego, będące niewiekim zaburzeniem wartości dokładnych.
<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>\displaystyle f</math> rozpatrzyć jej zaburzenie <math>\displaystyle f+\Delta f</math>, gdzie <math>\displaystyle |\Delta f| \leq \epsilon</math>, to  
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>\displaystyle |w_f(x) - w_{f+\Delta f}(x)| \leq  \mbox{cond} (x,f)|w_f(x)|\epsilon,
<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>\displaystyle  \mbox{cond} (x,f) = \frac{\sum_{j=0}^n |l_j(x) f(x_j)|}{|p_n(x)|} \geq 1.
<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 408: 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>\displaystyle [0,1]</math>) w sytuacji, gdy trzeci węzeł interpolacji zostanie zaburzony o 0.01.  
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>\displaystyle x_3 = 0.2</math> został zmieniony na <math>\displaystyle x_3 = 0.21</math> (czerwone).]]
[[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 416: Linia 392:
</div></div>
</div></div>


==Biblioteki==


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>\displaystyle N</math> węzłów, a <code style="color: #006">y</code> --- wektorem zawierającym wartości w węzłach, to  
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>\displaystyle N-1</math>, bo taki powinien być stopień wielomianu interpolacyjnego Lagrange'a!).
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>\displaystyle X</math>, także musimy użyć specjalnej funkcji,
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 443: Linia 418:
|+ <span style="font-variant:small-caps"> </span>
|+ <span style="font-variant:small-caps"> </span>
|-  
|-  
| <math>\displaystyle x</math>  ||  2  ||  1  ||  0  
| <math>x</math>  ||  2  ||  1  ||  0  
|-
|-
| <math>\displaystyle y</math>  ||  5  ||  2  ||  1  
| <math>y</math>  ||  5  ||  2  ||  1  


|}
|}
Linia 467: Linia 442:
</nowiki></div>
</nowiki></div>
   
   
Zgodnie z przewidywaniami, otrzymaliśmy wielomian <math>\displaystyle 1\cdot x^2 + 0\cdot x + 1</math>.
Zgodnie z przewidywaniami, otrzymaliśmy wielomian <math>1\cdot x^2 + 0\cdot x + 1</math>.
Wartość tego wielomianu dla <math>\displaystyle x=3</math> rzeczywiście jest równa 10.
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 476: Linia 451:
</nowiki></div>
</nowiki></div>
   
   
Też "coś" zostało obliczone --- wielomian (jak domyślamy się) <math>\displaystyle 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.
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 495: 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>\displaystyle x_j</math> dane są również ich krotności <math>\displaystyle n_j</math>, <math>\displaystyle 0\le j\le k</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>\displaystyle \sum_{j=0}^k n_j=n+1</math>. Należy skonstruować wielomian  
przy czym <math>\sum_{j=0}^k n_j=n+1</math>. Należy skonstruować wielomian  
<math>\displaystyle w_f\in\Pi_n</math> taki, że  
<math>w_f\in\Pi_n</math> taki, że  


<center><math>\displaystyle w_f^{(i)}(x_j)\,=\,f^{(i)}(x_j)\qquad \mbox{ dla } \quad  
<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>\displaystyle f</math> istnieją.  
<math>f</math> istnieją.  


{{lemat|||
{{lemat|||
Linia 514: 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>\displaystyle n+1</math>  
Przedstawiając wielomian w dowolnej bazie otrzymujemy układ <math>n+1</math>  
równań z <math>\displaystyle n+1</math> niewiadomymi, który dla zerowej prawej strony ma  
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>\displaystyle n</math>, który miałby zera o łącznej krotności  
stopnia nie większego niż <math>n</math>, który miałby zera o łącznej krotności  
większej niż <math>\displaystyle n</math>.  
większej niż <math>n</math>.  
}}
}}


Nas oczywiście interesuje konstrukcja wielomianu <math>\displaystyle w_f</math>. W tym celu  
Nas oczywiście interesuje konstrukcja wielomianu <math>w_f</math>. W tym celu  
ustawimy węzły <math>\displaystyle x_j</math> w ciąg  
ustawimy węzły <math>x_j</math> w ciąg  


<center><math>\displaystyle (\bar x_0,\bar x_1,\ldots,\bar x_n)\,=\,
<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>\displaystyle \Pi_n</math> jako  
i zdefiniujemy uogólnioną bazę Newtona w <math>\Pi_n</math> jako  


<center><math>\displaystyle \aligned p_0(x) &= 1, \\
<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.
\endaligned</math></center>
\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>\displaystyle f(\bar x_i,\bar x_{i+1},\ldots,\bar x_j)\,=\,
<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>\displaystyle \bar x_i=\bar x_{i+1}=\cdots=\bar x_j</math>, oraz  
dla <math>\bar x_i=\bar x_{i+1}=\cdots=\bar x_j</math>, oraz  


<center><math>\displaystyle f(\bar x_i,\bar x_{i+1},\ldots,\bar x_j)\,=\,\frac
<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>\displaystyle \bar x_i\ne\bar x_j</math>. Zauważmy, że przy tej definicji  
dla <math>\bar x_i\ne\bar x_j</math>. Zauważmy, że przy tej definicji  
różnice <math>\displaystyle f(\bar x_i,\ldots,\bar x_j)</math> możemy łatwo obliczyć  
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>\displaystyle b_j</math> wielomianu interpolacyjnego  
Współczynniki <math>b_j</math> wielomianu interpolacyjnego  
Hermite'a w bazie Newtona,  
Hermite'a w bazie Newtona,  


<center><math>\displaystyle w_f(\cdot)\,=\,\sum_{j=0}^n b_jp_j(\cdot),
<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>\displaystyle b_j\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_j),\qquad 0\le j\le n.
<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 571: 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>\displaystyle w_{i,j}\in\Pi_{j-i}</math> oznacza wielomian  
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>\displaystyle \bar x_i,\bar x_{i+1},\ldots,\bar x_j</math>.  
węzłach <math>\bar x_i,\bar x_{i+1},\ldots,\bar x_j</math>.  
To znaczy, <math>\displaystyle w_{i,j}</math> interpoluje <math>\displaystyle f</math> w węzłach <math>\displaystyle x_s</math> takich, że  
To znaczy, <math>w_{i,j}</math> interpoluje <math>f</math> w węzłach <math>x_s</math> takich, że  
<math>\displaystyle x_s</math> występuje w ciągu <math>\displaystyle \bar x_i,\ldots\bar x_j</math>, a jego krotność  
<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>\displaystyle x_s</math> w tym ciągu.  
jest liczbą powtórzeń <math>x_s</math> w tym ciągu.  


Zauważmy najpierw, że dla <math>\displaystyle \bar x_i\ne\bar x_j</math> zachodzi znany nam  
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>\displaystyle
<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>\displaystyle v(x)</math> prawą stronę powyższej równości.  
Rzeczywiście, oznaczmy przez <math>v(x)</math> prawą stronę powyższej równości.  
Dla <math>\displaystyle k</math> mniejszego od krotności danego węzła <math>\displaystyle x_s</math>  
Dla <math>k</math> mniejszego od krotności danego węzła <math>x_s</math>  
w ciągu <math>\displaystyle \bar x_i,\ldots\bar x_j</math>, mamy  
w ciągu <math>\bar x_i,\ldots\bar x_j</math>, mamy  
<math>\displaystyle w_{i+1,j}^{(k-1)}(x_s)=w_{i,j-1}^{(k-1)}(x_s)</math>, a ponieważ  
<math>w_{i+1,j}^{(k-1)}(x_s)=w_{i,j-1}^{(k-1)}(x_s)</math>, a ponieważ  


<center><math>\displaystyle \aligned v^{(k)}(x)&=\frac{k\,(w_{i+1,j}^{(k-1)}(x)-w_{i,j-1}^{(k-1)}(x))}
<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},
\endaligned</math></center>
\end{align}</math></center>


to
to


<center><math>\displaystyle v^{(k)}(x_s) \,=\,
<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>\displaystyle v</math> spełnia odpowiednie  
Korzystając z tego wzoru sprawdzamy, że <math>v</math> spełnia odpowiednie  
warunki interpolacyjne, a stąd <math>\displaystyle w_{i,j}=v</math>.  
warunki interpolacyjne, a stąd <math>w_{i,j}=v</math>.  


Dalej postępujemy indukcyjnie ze względu na <math>\displaystyle n</math>. Dla <math>\displaystyle n=0</math>  
Dalej postępujemy indukcyjnie ze względu na <math>n</math>. Dla <math>n=0</math>  
mamy <math>\displaystyle b_0=f(x_0)</math>. Dla <math>\displaystyle n\ge 1</math> wystarczy pokazać, że  
mamy <math>b_0=f(x_0)</math>. Dla <math>n\ge 1</math> wystarczy pokazać, że  
<math>\displaystyle b_n\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_n)</math>. W tym celu  
<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>\displaystyle \bar x_0=\bar x_n</math>, to mamy jeden węzeł <math>\displaystyle x_0</math>  
Jeśli <math>\bar x_0=\bar x_n</math>, to mamy jeden węzeł <math>x_0</math>  
o krotności <math>\displaystyle n+1</math>. Wielomian interpolacyjny jest wtedy postaci
o krotności <math>n+1</math>. Wielomian interpolacyjny jest wtedy postaci


<center><math>\displaystyle w_f(x)\,=\,\sum_{j=0}^n \frac{f^{(j)}(x_0)}{j!}(x-x_0)^j,
<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>\displaystyle b_n=f^{(n)}(x_0)/(n!)=f(\underbrace{x_0,\ldots,x_0}_{n+1})</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>\displaystyle \bar x_0\ne\bar x_j</math>, to równość  
Jeśli zaś <math>\bar x_0\ne\bar x_j</math>, to równość  
<math>\displaystyle b_n\,=\,f(\bar x_0,\bar x_1,\ldots,\bar x_n)</math> wynika z wcześniej  
<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 630: 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>\displaystyle x_0,\ldots,x_0,x_1,\ldots,x_1,\ldots,x_k,\ldots,x_k</math>, gdzie  
<math>x_0,\ldots,x_0,x_1,\ldots,x_1,\ldots,x_k,\ldots,x_k</math>, gdzie  
<math>\displaystyle x_j</math> są parami różne. Tą definicję można rozszerzyć do  
<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>\displaystyle f(t_0,t_1,\ldots,t_n)</math> jest współczynnikiem przy <math>\displaystyle x^n</math> wielomianu  
<math>f(t_0,t_1,\ldots,t_n)</math> jest współczynnikiem przy <math>x^n</math> wielomianu  
<math>\displaystyle w_{t_0,\ldots,t_n}\in\Pi_n</math> interpolującego <math>\displaystyle f</math> w węzłach <math>\displaystyle t_j</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>\displaystyle f(t_0,t_1,\ldots,t_n)\,=\,\frac{w^{(n)}_{t_0,\ldots,t_n}}{n!}.
<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 655: 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>\displaystyle \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ą.
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 662: Linia 633:
o błąd takiej aproksymacji.  
o błąd takiej aproksymacji.  


Niech <math>\displaystyle x_0,x_1,\ldots,x_n</math> będą (niekoniecznie różnymi)  
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>\displaystyle D\subsetR</math>. Dla danej funkcji <math>\displaystyle f:D\toR</math>, przez  
przedziału <math>D\subset R</math>. Dla danej funkcji <math>f:D\to R</math>, przez  
<math>\displaystyle w_f</math> rozważamy, tak jak w całym wykładzie, wielomian  
<math>w_f</math> rozważamy, tak jak w całym wykładzie, wielomian  
interpolacyjny stopnia co najwyżej <math>\displaystyle n</math> interpolujący <math>\displaystyle f</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 674: Linia 645:
   
   
Dla dowolnego punktu  
Dla dowolnego punktu  
<math>\displaystyle \bar x\in D</math> błąd interpolacji w <math>\displaystyle \bar x</math> wyraża się  
<math>\bar x\in D</math> błąd interpolacji w <math>\bar x</math> wyraża się  
wzorem  
wzorem  


<center><math>\displaystyle
<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>\displaystyle f\in C^{(n+1)}(D)</math>, czyli pochodna  
Jeśli ponadto <math>f\in C^{(n+1)}(D)</math>, czyli pochodna  
<math>\displaystyle f^{(n+1)}</math> w <math>\displaystyle D</math> istnieje i jest ciągła, to  
<math>f^{(n+1)}</math> w <math>D</math> istnieje i jest ciągła, to  


<center><math>\displaystyle f(\bar x)-w_f(\bar x)\,=\,(\bar x-x_0)(\bar x-x_1)
<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>\displaystyle \xi=\xi(\bar x)</math> jest pewnym punktem należącym do  
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>\displaystyle x_0,x_1,\ldots,x_n,\bar x</math>.  
<math>x_0,x_1,\ldots,x_n,\bar x</math>.  
}}
}}


{{dowod|||
{{dowod|||
Możemy założyć, że <math>\displaystyle \bar x</math> nie jest  
Możemy założyć, że <math>\bar x</math> nie jest  
żadnym z węzłów <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>. Niech  
żadnym z węzłów <math>x_j</math>, <math>0\le j\le n</math>. Niech  
<math>\displaystyle \bar w_f\in\Pi_{n+1}</math> będzie wielomianem interpolacyjnym  
<math>\bar w_f\in\Pi_{n+1}</math> będzie wielomianem interpolacyjnym  
funkcji <math>\displaystyle f</math> opartym na węzłach <math>\displaystyle x_0,\ldots,x_n</math> i dodatkowo  
funkcji <math>f</math> opartym na węzłach <math>x_0,\ldots,x_n</math> i dodatkowo  
na węźle <math>\displaystyle \bar x</math>. Mamy wtedy  
na węźle <math>\bar x</math>. Mamy wtedy  


<center><math>\displaystyle \bar w_f(x)\,=\,w_f(x)\,+\,(x-x_0)(x-x_1)\cdots(x-x_n)
<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>\displaystyle f(\bar x)=\bar w_f(\bar x)</math>, to mamy też pierwszą równość w lemacie.  
<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>\displaystyle \psi:D\toR</math>,  
<math>\psi:D\to R</math>,  


<center><math>\displaystyle \aligned \lefteqn{\psi(x) \;=\; f(x)-\bar w_f(x)} \\  
<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).  
\endaligned</math></center>
\end{align}</math></center>


Z warunków interpolacyjnych na <math>\displaystyle \bar w_f\in\Pi_{n+1}</math>  
Z warunków interpolacyjnych na <math>\bar w_f\in\Pi_{n+1}</math>  
wynika, że funkcja <math>\displaystyle \psi</math> ma punkty zerowe o łącznej  
wynika, że funkcja <math>\psi</math> ma punkty zerowe o łącznej  
krotności co najmniej <math>\displaystyle n+2</math>. Wykorzystując twierdzenie  
krotności co najmniej <math>n+2</math>. Wykorzystując twierdzenie  
Rolle'a wnioskujemy stąd, że <math>\displaystyle \psi'</math> ma zera o łącznej  
Rolle'a wnioskujemy stąd, że <math>\psi'</math> ma zera o łącznej  
krotności co najmniej <math>\displaystyle n+1</math>, <math>\displaystyle \psi''</math> ma zera o łącznej  
krotności co najmniej <math>n+1</math>, <math>\psi''</math> ma zera o łącznej  
krotności co najmniej <math>\displaystyle n</math>, itd. W końcu funkcja  
krotności co najmniej <math>n</math>, itd. W końcu funkcja  
<math>\displaystyle \psi^{(n+1)}</math> zeruje się w co najmniej jednym punkcie  
<math>\psi^{(n+1)}</math> zeruje się w co najmniej jednym punkcie  
<math>\displaystyle \xi=\xi(\bar x)</math> należącym do najmniejszego przedziału  
<math>\xi=\xi(\bar x)</math> należącym do najmniejszego przedziału  
zawierającego <math>\displaystyle x_0,x_1,\ldots,x_n,\bar x</math>. Wobec tego, że  
zawierającego <math>x_0,x_1,\ldots,x_n,\bar x</math>. Wobec tego, że  
<math>\displaystyle w_f^{(n+1)}\equiv 0</math>, a <math>\displaystyle (n+1)</math>-sza pochodna wielomianu  
<math>w_f^{(n+1)}\equiv 0</math>, a <math>(n+1)</math>-sza pochodna wielomianu  
<math>\displaystyle (x-x_0)\cdots(x-x_n)</math> wynosi <math>\displaystyle (n+1)!</math>, mamy  
<math>(x-x_0)\cdots(x-x_n)</math> wynosi <math>(n+1)!</math>, mamy  


<center><math>\displaystyle 0 \,=\, \psi^{(n+1)}(\xi)\,=\,f^{(n+1)}(\xi)-(n+1)!
<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>\displaystyle f(x_0,x_1,\ldots,x_n,\bar x)\,=\,
<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 741: Linia 710:


Zwykle interesuje nas nie tyle błąd w ustalonym punkcie
Zwykle interesuje nas nie tyle błąd w ustalonym punkcie
<math>\displaystyle \bar x\in D</math>, ale na całym przedziale <math>\displaystyle D</math>. Zakładając  
<math>\bar x\in D</math>, ale na całym przedziale <math>D</math>. Zakładając  
teraz, że przedział <math>\displaystyle D</math> jest domknięty, czyli  
teraz, że przedział <math>D</math> jest domknięty, czyli  


<center><math>\displaystyle D\,=\,[a,b]
<center><math>D\,=\,[a,b]
</math></center>
</math></center>


dla pewnych <math>\displaystyle -\infty<a<b<+\infty</math>, błąd ten będziemy  
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>\displaystyle g:[a,b]\toR</math>, norma ta jest zdefiniowana  
funkcji ciągłej <math>g:[a,b]\to R</math>, norma ta jest zdefiniowana  
jako
jako


<center><math>\displaystyle \|g\|_{ C([a,b])}\,=\,\max_{x\in D} |g(x)|.
<center><math>\|g\|_{ C([a,b])}\,=\,\max_{x\in D} |g(x)|</math></center>
</math></center>


Niech <math>\displaystyle F^r_M([a,b])</math>, gdzie <math>\displaystyle r\ge 0</math>, będzie klasą funkcji  
Niech <math>F^r_M([a,b])</math>, gdzie <math>r\ge 0</math>, będzie klasą funkcji  


<center><math>\displaystyle F^r_M([a,b])\,=\,\{\,f\in C^{(r+1)}([a,b]):\,
<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>\displaystyle 0<M<\infty</math>. Mamy następujące twiedzenie.  
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>\displaystyle f\in F^r_M([a,b])</math> aproksymujemy jej wielomianem  
<math>f\in F^r_M([a,b])</math> aproksymujemy jej wielomianem  
interpolacyjnym <math>\displaystyle w_f\in\Pi_r</math> opartym na <math>\displaystyle r+1</math>  
interpolacyjnym <math>w_f\in\Pi_r</math> opartym na <math>r+1</math>  
węzłach <math>\displaystyle x_0,\ldots,x_r\in [a,b]</math>. Wtedy maksymalny  
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>\displaystyle \aligned e(F^r_M([a,b]);x_0,x_1,\ldots,x_r) &=  
<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)|.
\endaligned</math></center>
\end{align}</math></center>


}}
}}
Linia 781: 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>\displaystyle f\in F^r_M([a,b])</math> mamy  
z lematu o postaci błędu interpolacji, bowiem dla <math>f\in F^r_M([a,b])</math> mamy  


<center><math>\displaystyle \aligned \|f-w_f\|_{ C([a,b])}&=\max_{a\le x\le b}|f(x)-w_f(x)| \\
<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)|.
\endaligned</math></center>
\end{align}</math></center>


Z drugiej strony zauważmy, że dla wielomianu  
Z drugiej strony zauważmy, że dla wielomianu  
<math>\displaystyle v(x)=M\frac{x^{r+1}}{(r+1)!}</math> mamy <math>\displaystyle v\in F^r_M([a,b])</math> oraz  
<math>v(x)=M\frac{x^{r+1}}{(r+1)!}</math> mamy <math>v\in F^r_M([a,b])</math> oraz  


<center><math>\displaystyle \|v-w_v\|_{ C([a,b])}\,=\,\frac M{(r+1)!}\cdot
<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 798: 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>\displaystyle f(x) = \frac{1}{1+x^2}
<center><math>f(x) = \frac{1}{1+x^2}
</math></center>
</math></center>


w <math>\displaystyle N</math> równoodległych węzłach na przedziale <math>\displaystyle [-5,5]</math>. Okazuje się, że dla dużych wartości <math>\displaystyle N</math>, wielomian interpolacyjny ma poważne kłopoty z aproksymacją tej funkcji przy krańcach przedziału:
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>\displaystyle N=17</math> węzłach równoodległych dla <math>\displaystyle f(x) = \frac{1}{1+x^2}</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 786:


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ą".
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ą".
</div></div>
 


Zauważmy, że błąd aproksymacji  
Zauważmy, że błąd aproksymacji  
<math>\displaystyle e(F^r_M([a,b]);x_0,\ldots,x_r)</math> w istotny sposób  
<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>\displaystyle x_j</math>. Naturalne jest więc  
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>\displaystyle x_j</math>  
teraz następujące pytanie: w których punktach <math>x_j</math>  
przedziału <math>\displaystyle [a,b]</math> należy obliczać wartości funkcji,  
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>\displaystyle \max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|</math>  
<math>\max_{a\le x\le b}|(x-x_0)\cdots(x-x_r)|</math>  
względem węzłów <math>\displaystyle x_j</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>\displaystyle F^r_M([a,b])(x_0,\ldots,x_r)</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>\displaystyle (a,b)</math>, tzn.
jest minimalny gdy węzły interpolacji są zadane jako <strong>węzły Czebyszewa</strong> na <math>(a,b)</math>, tzn.


<center><math>\displaystyle x_j^*\,=\,\frac{b-a}2\cdot
<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>\displaystyle x_j^*</math> mamy  
Ponadto, dla optymalnych węzłów <math>x_j^*</math> mamy  


<center><math>\displaystyle e(F_M^r([a,b]);x_0^*,\ldots,x_r^*)\,=\,
<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 850: 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>\displaystyle \{T_k\}_{k\ge 0}</math> <strong>wielomianów Czebyszewa</strong>  
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>\displaystyle \aligned T_0(x) &= 1, \\
<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.
\endaligned</math></center>
\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>\displaystyle T_k</math> jest wielomianem stopnia dokładnie  
Zauważmy, że <math>T_k</math> jest wielomianem stopnia dokładnie  
<math>\displaystyle k</math> o współczynniku przy <math>\displaystyle x^k</math> równym <math>\displaystyle 2^{k-1}</math>  
<math>k</math> o współczynniku przy <math>x^k</math> równym <math>2^{k-1}</math>  
(<math>\displaystyle k\ge 1</math>). Ponadto wielomian <math>\displaystyle T_k</math> można dla <math>\displaystyle |x|\le 1</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>\displaystyle
<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>\displaystyle k=0,1</math>. Stosując podstawienie <math>\displaystyle \cos t=x</math>, <math>\displaystyle 0\le t\le\pi</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>\displaystyle k\ge 1</math>  
oraz wzór na sumę cosinusów otrzymujemy dla <math>k\ge 1</math>  


<center><math>\displaystyle \cos((k+1)t)\,=\,2\cdot\cos t\cos(kt)\,-\,\cos((k-1)t),
<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>\displaystyle T_{k+1}</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>\displaystyle [-1,1]</math>]]
[[Image:MNczebyszew.png|thumb|550px|center|Kilka pierwszych wielomianów Czebyszewa na odcinku <math>[-1,1]</math>]]


Ze wzoru <math>\displaystyle T_k(x) = \cos(k\arccos x)</math> wynikają również inne ważne  
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>\displaystyle [-1,1]</math> wynosi  
Czebyszewa na <math>[-1,1]</math> wynosi  


<center><math>\displaystyle \|T_k\|_{ C([-1,1])}\,=\,\max_{-1\le x\le 1} |T_k(x)|
<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>\displaystyle k+1</math> punktach tego przedziału równych  
i jest osiągana w <math>k+1</math> punktach tego przedziału równych  


<center><math>\displaystyle
<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>\displaystyle T_k(y_j)=(-1)^j</math>.  
przy czym <math>T_k(y_j)=(-1)^j</math>.  


W końcu, <math>\displaystyle k</math>-ty wielomian Czebyszewa <math>\displaystyle T_k</math> ma dokładnie  
W końcu, <math>k</math>-ty wielomian Czebyszewa <math>T_k</math> ma dokładnie  
<math>\displaystyle k</math> pojedynczych zer w <math>\displaystyle [-1,1]</math> równych  
<math>k</math> pojedynczych zer w <math>[-1,1]</math> równych  


<center><math>\displaystyle z_j\,=\,\cos\Big(\frac{2j+1}{2r}\pi\Big),
<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 912: Linia 874:
wielomianów Czebyszewa.  
wielomianów Czebyszewa.  


Przez <math>\displaystyle \overline{\Pi}_k</math> oznaczymy klasę wielomianów  
Przez <math>\overline{\Pi}_k</math> oznaczymy klasę wielomianów  
stopnia <math>\displaystyle k</math> o współczynniku wiodącym równym <math>\displaystyle 1</math>, tzn.
stopnia <math>k</math> o współczynniku wiodącym równym <math>1</math>, tzn.


<center><math>\displaystyle \overline{\Pi}_k\,=\,\{\,w\in\Pi_k:\,
<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>\displaystyle k\ge 1</math>. W klasie  
Niech <math>k\ge 1</math>. W klasie  
<math>\displaystyle \overline{\Pi}_k</math> minimalną normę jednostajną na  
<math>\overline{\Pi}_k</math> minimalną normę jednostajną na  
przedziale <math>\displaystyle [-1,1]</math> ma wielomian <math>\displaystyle w^*=2^{1-k}T_k</math>, tzn.
przedziale <math>[-1,1]</math> ma wielomian <math>w^*=2^{1-k}T_k</math>, tzn.


<center><math>\displaystyle \min_{w\in\overline{\Pi}_k}\|w\|_{C([-1,1])}\,=\,
<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 939: Linia 899:
{{dowod|||
{{dowod|||
Zauważmy najpierw, że  
Zauważmy najpierw, że  
<math>\displaystyle w^*\in\overline\Pi_k</math> oraz <math>\displaystyle \|w^*\|_{C([-1,1])}=2^{1-k}</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>\displaystyle \overline\Pi_k</math> jest nie mniejsza niż <math>\displaystyle 2^{1-k}</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>\displaystyle w\in\overline\Pi_k</math> taki, że
<math>w\in\overline\Pi_k</math> taki, że


<center><math>\displaystyle \|w\|_{C([-1,1])}\,<\,\frac 1{2^{k-1}}\,=\,
<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>\displaystyle \psi=w^*-w</math>. Ponieważ dla punktów  
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>\displaystyle w^*(y_{k-j})=(-1)^j2^{1-k}</math> oraz <math>\displaystyle |w(y_{k-j})|<2^{1-k}</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>\displaystyle \psi(y_{k-j})\,\left\{\,\begin{array} {ll}
<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>\displaystyle 0\le j\le k</math>.  
<math>0\le j\le k</math>.  
Stąd <math>\displaystyle \psi</math> ma co najmniej jedno zero w każdym z  
Stąd <math>\psi</math> ma co najmniej jedno zero w każdym z  
przedziałów <math>\displaystyle (y_i,y_{i+1})</math> dla <math>\displaystyle 0\le i\le k-1</math>, czyli  
przedziałów <math>(y_i,y_{i+1})</math> dla <math>0\le i\le k-1</math>, czyli  
w sumie <math>\displaystyle k</math> zer. Z drugiej strony, <math>\displaystyle \psi</math> jest wielomianem  
w sumie <math>k</math> zer. Z drugiej strony, <math>\psi</math> jest wielomianem  
stopnia co najwyżej <math>\displaystyle k-1</math> (bo współczynniki przy <math>\displaystyle x^k</math>  
stopnia co najwyżej <math>k-1</math> (bo współczynniki przy <math>x^k</math>  
w wielomianach <math>\displaystyle w^*</math> i <math>\displaystyle w</math> redukują się), a więc  
w wielomianach <math>w^*</math> i <math>w</math> redukują się), a więc  
<math>\displaystyle \psi=0</math> i <math>\displaystyle w^*=w</math>.  
<math>\psi=0</math> i <math>w^*=w</math>.  
}}
}}


Linia 976: 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>\displaystyle (x-x_0)(x-x_1)\cdots(x-x_r)</math> jest w klasie  
wielomian <math>(x-x_0)(x-x_1)\cdots(x-x_r)</math> jest w klasie  
<math>\displaystyle \overline\Pi_{r+1}</math>. Stąd dla <math>\displaystyle [a,b]=[-1,1]</math> optymalnymi  
<math>\overline\Pi_{r+1}</math>. Stąd dla <math>[a,b]=[-1,1]</math> optymalnymi  
węzłami są zera <math>\displaystyle z_j</math> wielomianu Czebyszewa, przy których  
węzłami są zera <math>z_j</math> wielomianu Czebyszewa, przy których  


<center><math>\displaystyle (x-z_0)(x-z_1)\cdots(x-z_r)\,=\,\frac{T_{r+1}(x)}{2^r}.
<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>\displaystyle [a,b]</math> jest inny niż <math>\displaystyle [-1,1]</math>, należy  
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>\displaystyle [-1,1]</math>. Bezpośrednie sprawdzenie pokazuje, że w klasie  
<math>[-1,1]</math>. Bezpośrednie sprawdzenie pokazuje, że w klasie  
<math>\displaystyle \overline\Pi_{r+1}</math> minimalną normę Czebyszewa na  
<math>\overline\Pi_{r+1}</math> minimalną normę Czebyszewa na  
przedziale <math>\displaystyle [a,b]</math> ma wielomian  
przedziale <math>[a,b]</math> ma wielomian  


<center><math>\displaystyle w_{a,b}^*(x)\,=\,\Big(\frac{b-a}{2}\Big)^{r+1}
<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>\displaystyle \|w_{a,b}^*\|_{C([a,b])}\,=\,\Big(\frac{b-a}{2}\Big)^{r+1}
<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>\displaystyle x^*_j</math> są optymalne.}}
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 1007: 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>\displaystyle f\in C[-1,1]</math>, wielomian interpolacyjny  <math>\displaystyle w_f</math> stopnia co najwyżej <math>\displaystyle n</math>, oparty na węzłach Czebyszewa, spełnia
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>\displaystyle ||f-w_f||_{C[-1,1]}  \leq \left(2+\frac{2}{\pi}\log(n+1)\right) ||f-w_f^*||_{C[-1,1]}
<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>\displaystyle w_f^*</math> jest wielomianem stopnia co najwyżej <math>\displaystyle n</math>, najlepiej aproksymującym <math>\displaystyle f</math> w sensie normy jednostajnej.  
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 1018: Linia 975:


{{dowod|||
{{dowod|||
Niech <math>\displaystyle x_j</math> będą węzłami Czebyszewa.
Niech <math>x_j</math> będą węzłami Czebyszewa.
W oczywisty sposób,
W oczywisty sposób,


<center><math>\displaystyle ||f-w_f|| = ||f-w_f^* + w_f^* - w_f|| \leq  ||f-w_f^*|| + ||w_f^* - w_f||
<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>\displaystyle w_f^* = \sum_j l_j(\cdot) w_f^*(x_j)</math> (dlaczego?), to
Ponieważ <math>w_f^* = \sum_j l_j(\cdot) w_f^*(x_j)</math> (dlaczego?), to


<center><math>\displaystyle ||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^*||.
<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>\displaystyle ||\sum_j |l_j|||</math> (tak zwana stała Lebesque'a) dla węzłów Czebyszewa ma oszacowanie
Tymczasem <math>||\sum_j |l_j|||</math> (tak zwana stała Lebesque'a) dla węzłów Czebyszewa ma oszacowanie


,  
,  


<center><math>\displaystyle ||\sum_j |l_j||| \leq \frac{2}{\pi} \log(n+1) + 1.
<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>\displaystyle [-1,1]</math> mamy jedynie  
Jako ciekawostkę dodajmy, że dla węzłów równoodległych na <math>[-1,1]</math> mamy jedynie  


<center><math>\displaystyle ||\sum_j |l_j||| \leq \frac{2^n}{n\log n},
<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 1047: Linia 1001:
-->
-->
   
   
Jeśli więc <math>\displaystyle n \leq 5</math>, to wielomian oparty na węzłach Czebyszewa jest co najwyżej 3.02 razy, a gdy <math>\displaystyle n \leq 20</math> --- maksymalnie 4 razy gorszy od optymalnego. Można więc powiedzieć, że jest ''prawie optymalny''.
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.

Wielomian w (czerwony) stopnia 6, interpolujący 7 zadanych wartości (zaznaczone na zielono) danej funkcji f

Niech DR i niech F będzie pewnym zbiorem funkcji f:DR. 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,

Πn={w(x)=anxn+an1xn1++a1x+a0:;ajR,0jn}

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 f:DR 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ółczynników cj takich, że wielomian

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

interpoluje f w punktach xj, 0jn.

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 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 Π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.

Teraz 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(x)=j=0nf(xj)lj(x)

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

Wzory barycentryczne

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 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 wzoru 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.

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>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 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, gdy danymi są współczynniki wielomianu, 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,

p0(x)=1,pj(x)=(xx0)(xx1)(xxj1),1jn.

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ż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 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|width=550|height=300</flash>
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 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>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 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, zgadłbyś, do czego może służyć?!

<flash>file=Interpolacjainsitu.swf|width=550|height=300</flash>
Wyznaczenie tego samego wielomianu w, interpolującego zestaw punktów (0,2)(1,5)(1,7) algorytmem różnic dzielonych --- wykonanym tym razem 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 --- o ile węzły są uporządkowane nierosnąco lub niemalejąco --- algorytm liczenia f(t0,,tn) jest numerycznie poprawny ze względu na dane interpolacyjne f(tj), a cały algorytm różnic dzielonych daje w arytmetyce flν 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 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

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 [0,1]) w sytuacji, gdy trzeci węzeł interpolacji zostanie zaburzony o 0.01.

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ł x3=0.2 został zmieniony na x3=0.21 (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!).


MATLAB i Octave mają wbudowaną funkcję wyznaczającą wielomian, interpolujący zadane wartości: jeśli x jest wektorem zawierającym N 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 N1, 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 X, także musimy użyć specjalnej funkcji,

Y = polyval(c,X);

Domyślamy się, że implementuje ona algorytm Hornera.

Przykład

Interpolujemy tabelkę

x 2 1 0
y 5 2 1

wielomianem stopnia co najwyżej 2.

octave:1> x = [2, 1, 0] x = 2 1 0 octave:2> y = [5, 2, 1] y = 5 2 1 octave:3> c = polyfit(x,y,2) c = 1 0 1 octave:4> polyval(c,3) ans = 10

Zgodnie z przewidywaniami, otrzymaliśmy wielomian 1x2+0x+1. Wartość tego wielomianu dla x=3 rzeczywiście jest równa 10.

A co się stanie, gdy będziemy szukać wielomianu stopnia niższego?

octave:6> c1 = polyfit(x,y,1) c1 = 2.00000 0.66667

Też "coś" zostało obliczone --- wielomian (jak domyślamy się) 2x+23. 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:

octave:7> c3 = polyfit(x,y,3) c3 = 0.21429 0.35714 0.42857 1.00000

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 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.

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

p0(x)=1,pj(x)=(xx¯0)(xx¯1)(xx¯j1),1jn.

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 O różnicach dzielonych dla interpolacji Hermite'a

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ż

v(k)(x)=k(wi+1,j(k1)(x)wi,j1(k1)(x))x¯jx¯i+(xx¯i)wi+1,j(k)(x)(xx¯j)wi,j1(k)(x)x¯jx¯i,

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", 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 (sin,exp,...) 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 x0,x1,,xn będą (niekoniecznie różnymi) węzłami należącymi do pewnego (być może nieskończonego) przedziału DR. Dla danej funkcji f:DR, 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ę ψ:DR,

ψ(x)=f(x)w¯f(x)=f(x)wf(x)(xx0)(xx1)(xxn)f(x0,,xn,x¯).

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 g:[a,b]R, 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 O najgorszym możliwym błędzie interpolacji w klasie

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

e(FMr([a,b]);x0,x1,,xr)=maxfFMr([a,b])fwfC([a,b])=M(r+1)!maxaxb|(xx0)(xxr)|.

Dowód

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

fwfC([a,b])=maxaxb|f(x)wf(x)|=maxaxb|(xx0)(xxr)||f(r+1)(ξ(x))|(r+1)!M(r+1)!maxxD|(xx0)(xxr)|.

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.

Zjawisko Rungego i dobór węzłów interpolacji

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:

Zjawisko Rungego: interpolacja w N=17 węzłach równoodległych dla f(x)=11+x2

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

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.

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ą najspokojniejsze: wiją się, ale z umiarem, bo zagęszczone przy krańcach węzły skutecznie je "duszą".


Zauważmy, że błąd aproksymacji e(FMr([a,b]);x0,,xr) w istotny sposób zależy od wyboru węzłów xj. Naturalne jest więc teraz następujące pytanie: w których punktach xj przedziału [a,b] należy obliczać wartości funkcji, aby błąd był minimalny? Problem ten sprowadza się oczywiście do minimalizacji wielkości maxaxb|(xx0)(xxr)| względem węzłów xj.

Twierdzenie O optymalnym doborze węzłów

Błąd aproksymacji w klasie funkcji FMr([a,b])(x0,,xr) jest minimalny gdy węzły interpolacji są zadane jako węzły Czebyszewa na (a,b), tzn.

xj*=ba2cos(2j+12r+2π)+a+b2,0jr

Ponadto, dla optymalnych węzłów xj* mamy

e(FMr([a,b]);x0*,,xr*)=2M(r+1)!(ba4)r+1

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 {Tk}k0 wielomianów Czebyszewa (pierwszego rodzaju) zdefiniowany jest indukcyjnie jako

T0(x)=1,T1(x)=x,Tk+1(x)=2xTk(x)Tk1(x), dla k1.
Pafnutij Lwowicz Czebyszew
Zobacz biografię

Zauważmy, że Tk jest wielomianem stopnia dokładnie k o współczynniku przy xk równym 2k1 (k1). Ponadto wielomian Tk można dla |x|1 przedstawić w postaci

Tk(x)=cos(karccosx)

Rzeczywiście, łatwo sprawdzić, że jest to prawdą dla k=0,1. Stosując podstawienie cost=x, 0tπ, oraz wzór na sumę cosinusów otrzymujemy dla k1

cos((k+1)t)=2costcos(kt)cos((k1)t),

co jest równoważne formule rekurencyjnej dla Tk+1.

Kilka pierwszych wielomianów Czebyszewa na odcinku [1,1]

Ze wzoru Tk(x)=cos(karccosx) wynikają również inne ważne własności wielomianów Czebyszewa. Norma wielomianu Czebyszewa na [1,1] wynosi

TkC([1,1])=max1x1|Tk(x)|=1

i jest osiągana w k+1 punktach tego przedziału równych

yj=cos(jkπ),0jk,

przy czym Tk(yj)=(1)j.

W końcu, k-ty wielomian Czebyszewa Tk ma dokładnie k pojedynczych zer w [1,1] równych

zj=cos(2j+12rπ),0jk1

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 Πk oznaczymy klasę wielomianów stopnia k o współczynniku wiodącym równym 1, tzn.

Πk={wΠk:w(x)=xk+}

Twierdzenie O minimaksie

Niech k1. W klasie Πk minimalną normę jednostajną na przedziale [1,1] ma wielomian w*=21kTk, tzn.

minwΠkwC([1,1])=w*C([1,1])=12k1
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.


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 (xx0)(xx1)(xxr) jest w klasie Πr+1. Stąd dla [a,b]=[1,1] optymalnymi węzłami są zera zj wielomianu Czebyszewa, przy których

(xz0)(xz1)(xzr)=Tr+1(x)2r

Jeśli przedział [a,b] jest inny niż [1,1], należy dokonać liniowej zamiany zmiennych tak, aby przeszedł on na [1,1]. Bezpośrednie sprawdzenie pokazuje, że w klasie Πr+1 minimalną normę Czebyszewa na przedziale [a,b] ma wielomian

wa,b*(x)=(ba2)r+1w*(2x(a+b)ba)

Stąd

wa,b*C([a,b])=(ba2)r+112r=2(ba4)r+1
i węzły xj* 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, o prawie optymalnej interpolacji w węzłach Czebyszewa

Dla fC[1,1], wielomian interpolacyjny wf stopnia co najwyżej n, oparty na węzłach Czebyszewa, spełnia

||fwf||C[1,1](2+2πlog(n+1))||fwf*||C[1,1]

gdzie wf* jest wielomianem stopnia co najwyżej n, najlepiej aproksymującym f w sensie normy jednostajnej.


Jeśli więc n5, to wielomian oparty na węzłach Czebyszewa jest co najwyżej 3.02 razy, a gdy n20 --- 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.