MN11: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
mNie podano opisu zmian
 
(Nie pokazano 10 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 29: Linia 29:
własności, które teraz określimy.
własności, które teraz określimy.


Niech dany będzie przedział skończony <math>\displaystyle [a,b]</math> i węzły  
Niech dany będzie przedział skończony <math>[a,b]</math> i węzły  


<center><math>\displaystyle a \,=\, x_0 \,<\, x_1 \,<\, \cdots \,<\, x_n \,=\, b,  
<center><math>a \,=\, x_0 \,<\, x_1 \,<\, \cdots \,<\, x_n \,=\, b,  
</math></center>
</math></center>


przy czym <math>\displaystyle n\ge 1</math>.  
przy czym <math>n\ge 1</math>.  


{{definicja|||
{{definicja|||


Funkcję <math>\displaystyle s:R\toR</math> nazywamy <strong>funkcją sklejaną rzędu <math>\displaystyle r</math></strong> (<math>\displaystyle r\ge 1</math>) odpowiadającą węzłom <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>, jeśli spełnione są następujące  
Funkcję <math>s:R\to R</math> nazywamy <strong>funkcją sklejaną rzędu <math>r</math></strong> (<math>r\ge 1</math>) odpowiadającą węzłom <math>x_j</math>, <math>0\le j\le n</math>, jeśli spełnione są następujące  
dwa warunki:
dwa warunki:
   
   
; (i)
; (i)
:  <math>\displaystyle s</math> jest wielomianem stopnia co najwyżej <math>\displaystyle 2r-1</math> na każdym  
:  <math>s</math> jest wielomianem stopnia co najwyżej <math>2r-1</math> na każdym  
z przedziałów <math>\displaystyle [x_{j-1},x_j]</math>, tzn.  
z przedziałów <math>[x_{j-1},x_j]</math>, tzn.  
<math>\displaystyle s_{|[x_{j-1},x_j]}\in\Pi_{2r-1}</math>, <math>\displaystyle 1\le j\le n</math>,  
<math>s_{|[x_{j-1},x_j]}\in\Pi_{2r-1}</math>, <math>1\le j\le n</math>,  


; (ii)
; (ii)
:  <math>\displaystyle s</math> jest <math>\displaystyle (2r-2)</math>-krotnie różniczkowalna w sposób  
:  <math>s</math> jest <math>(2r-2)</math>-krotnie różniczkowalna w sposób  
ciągły na całej prostej, tzn. <math>\displaystyle s\in C^{(2r-2)}(R)</math>.
ciągły na całej prostej, tzn. <math>s\in C^{(2r-2)}(R)</math>.
   
   
Jeśli ponadto  
Jeśli ponadto  
   
   
; (iii)
; (iii)
:  <math>\displaystyle s</math> jest wielomianem stopnia co najwyżej <math>\displaystyle r-1</math> poza  
:  <math>s</math> jest wielomianem stopnia co najwyżej <math>r-1</math> poza  
<math>\displaystyle (a,b)</math>, tzn. <math>\displaystyle s_{|(-\infty,a]},s_{|[b,+\infty)}\in\Pi_{r-1}</math>,
<math>(a,b)</math>, tzn. <math>s_{|(-\infty,a]},s_{|[b,+\infty)}\in\Pi_{r-1}</math>,
   
   
to <math>\displaystyle s</math> jest naturalną funkcją sklejaną.  
to <math>s</math> jest naturalną funkcją sklejaną.  
}}
}}


Klasę naturalnych funkcji sklejanych rzędu <math>\displaystyle r</math> opartych na  
Klasę naturalnych funkcji sklejanych rzędu <math>r</math> opartych na  
węzłach <math>\displaystyle x_j</math> będziemy oznaczać przez  
węzłach <math>x_j</math> będziemy oznaczać przez  
<math>\displaystyle {\cal S}_r(x_0,\ldots,x_n)</math>, albo po prostu <math>\displaystyle {\cal S}_r</math>,  
<math>{\cal S}_r(x_0,\ldots,x_n)</math>, albo po prostu <math>{\cal S}_r</math>,  
jeśli węzły są ustalone.  
jeśli węzły są ustalone.  


Na przykład funkcją sklejaną rzędu pierwszego (<math>\displaystyle r=1</math>)  
Na przykład funkcją sklejaną rzędu pierwszego (<math>r=1</math>)  
jest funkcja ciągła i liniowa na poszczególnych  
jest funkcja ciągła i liniowa na poszczególnych  
przedziałach <math>\displaystyle [x_{j-1},x_j]</math>. Jest ona naturalna, gdy poza  
przedziałach <math>[x_{j-1},x_j]</math>. Jest ona naturalna, gdy poza  
<math>\displaystyle (a,b)</math> jest funkcją stała. Tego typu funkcje nazywamy  
<math>(a,b)</math> jest funkcją stała. Tego typu funkcje nazywamy  
<strong>liniowymi funkcjami sklejanymi</strong>.  
<strong>liniowymi funkcjami sklejanymi</strong>.  


Najważniejszymi z praktycznego punktu widzenia są jednak  
Najważniejszymi z praktycznego punktu widzenia są jednak  
funkcje sklejane rzędu drugiego odpowiadające <math>\displaystyle r=2</math>. Są  
funkcje sklejane rzędu drugiego odpowiadające <math>r=2</math>. Są  
to funkcje, które są na <math>\displaystyle R</math> dwa razy różniczkowalne w  
to funkcje, które są na <math>R</math> dwa razy różniczkowalne w  
sposób ciągły, a na każdym z podprzedziałów są  
sposób ciągły, a na każdym z podprzedziałów są  
wielomianami stopnia co najwyżej trzeciego. W tym przypadku  
wielomianami stopnia co najwyżej trzeciego. W tym przypadku  
mówimy o <strong>kubicznych funkcjach sklejanych</strong>. Funkcja  
mówimy o <strong>kubicznych funkcjach sklejanych</strong>. Funkcja  
sklejana kubiczna <math>\displaystyle s</math> jest naturalna, gdy poza <math>\displaystyle (a,b)</math> jest  
sklejana kubiczna <math>s</math> jest naturalna, gdy poza <math>(a,b)</math> jest  
wielomianem liniowym, a więc <math>\displaystyle s''(a) = s''(b) = 0</math>.  
wielomianem liniowym, a więc <math>s''(a) = s''(b) = 0</math>.


==Interpolacja i gładkość==
==Interpolacja i gładkość==
Linia 84: Linia 84:
do dowodu dalszych twierdzeń.  
do dowodu dalszych twierdzeń.  


Niech <math>\displaystyle W^r(a,b)</math> będzie klasą funkcji <math>\displaystyle f:[a,b]\toR</math> takich,  
Niech <math>W^r(a,b)</math> będzie klasą funkcji <math>f:[a,b]\to R</math> takich,  
że <math>\displaystyle f</math> jest <math>\displaystyle (r-1)</math> razy różniczkowalna na <math>\displaystyle [a,b]</math> w sposób  
że <math>f</math> jest <math>(r-1)</math> razy różniczkowalna na <math>[a,b]</math> w sposób  
ciągły oraz <math>\displaystyle f^{(r)}(x)</math> istnieje prawie wszędzie na <math>\displaystyle [a,b]</math>  
ciągły oraz <math>f^{(r)}(x)</math> istnieje prawie wszędzie na <math>[a,b]</math>  
i jest całkowalna z kwadratem, tzn.  
i jest całkowalna z kwadratem, tzn.  


<center><math>\displaystyle \aligned W^r(a,b) &= \{\,f\in C^{(r-1)}([a,b]):\, f^{(r)}(x)  
<center><math>\begin{align} W^r(a,b) &= \{\,f\in C^{(r-1)}([a,b]):\, f^{(r)}(x)  
     \mbox{  istnieje p.w. na  }  [a,b] \\
     \mbox{  istnieje p.w. na  }  [a,b] \\
     && \qquad\qquad\qquad\qquad  \mbox{  oraz  }  
     && \qquad\qquad\qquad\qquad  \mbox{  oraz  }  
       f^{(r)}\in{\cal L}_2(a,b)\,\}.
       f^{(r)}\in{\cal L}_2(a,b)\,\}.
\endaligned</math></center>
\end{align}</math></center>


Oczywiście każda funkcja sklejana rzędu <math>\displaystyle r</math> (niekoniecznie  
Oczywiście każda funkcja sklejana rzędu <math>r</math> (niekoniecznie  
naturalna) należy do <math>\displaystyle W^r(a,b)</math>.  
naturalna) należy do <math>W^r(a,b)</math>.  


{{lemat|||
{{lemat|||
   
   
Niech <math>\displaystyle f\in W^r(a,b)</math> będzie funkcją  
Niech <math>f\in W^r(a,b)</math> będzie funkcją  
zerującą się w węzłach, tzn.  
zerującą się w węzłach, tzn.  


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


Wtedy dla dowolnej naturalnej funkcji sklejanej <math>\displaystyle s\in {\cal S}_r</math>  
Wtedy dla dowolnej naturalnej funkcji sklejanej <math>s\in {\cal S}_r</math>  
mamy  
mamy  


<center><math>\displaystyle \int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,0.  
<center><math>\int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,0.  
</math></center>
</math></center>


Linia 115: Linia 114:


{{dowod|||
{{dowod|||
Dla <math>\displaystyle r=1</math> funkcja <math>\displaystyle s'</math> jest przedziałami stała.  
Dla <math>r=1</math> funkcja <math>s'</math> jest przedziałami stała.  
Oznaczając przez <math>\displaystyle a_j</math> jej wartość na <math>\displaystyle [x_{j-1},x_j]</math> dostajemy  
Oznaczając przez <math>a_j</math> jej wartość na <math>[x_{j-1},x_j]</math> dostajemy  


<center><math>\displaystyle \aligned \int_a^b f'(x)s'(x)\,dx &=  
<center><math>\begin{align} \int_a^b f'(x)s'(x)\,dx &=  
           \sum_{j=1}^n\int_{t_{j-1}}^{t_j} f'(x)a_j\,dx \\
           \sum_{j=1}^n\int_{t_{j-1}}^{t_j} f'(x)a_j\,dx \\
         &= \sum_{j=1}^n a_j(f(x_j)-f(x_{j-1}))\,=\,0,  
         &= \sum_{j=1}^n a_j(f(x_j)-f(x_{j-1}))\,=\,0,  
\endaligned</math></center>
\end{align}</math></center>


ponieważ <math>\displaystyle f</math> zeruje się w <math>\displaystyle t_j</math>.  
ponieważ <math>f</math> zeruje się w <math>t_j</math>.  


Rozpatrzmy teraz przypadek <math>\displaystyle r\ge 2</math>. Ponieważ  
Rozpatrzmy teraz przypadek <math>r\ge 2</math>. Ponieważ  


<center><math>\displaystyle (f^{(r-1)}s^{(r)})'\,=\,f^{(r)}s^{(r)}\,+\,f^{(r-1)}s^{(r+1)},  
<center><math>(f^{(r-1)}s^{(r)})'\,=\,f^{(r)}s^{(r)}\,+\,f^{(r-1)}s^{(r+1)},  
</math></center>
</math></center>


to  
to  


<center><math>\displaystyle \int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,f^{(r-1)}(x)s^{(r)}(x)
<center><math>\int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,f^{(r-1)}(x)s^{(r)}(x)
     \Big |_a^b \,-\,\int_a^b f^{(r-1)}(x)s^{(r+1)}(x)\,dx.
     \Big |_a^b \,-\,\int_a^b f^{(r-1)}(x)s^{(r+1)}(x)\,dx</math></center>
</math></center>


Wobec tego, że <math>\displaystyle s</math> jest poza przedziałem <math>\displaystyle (a,b)</math> wielomianem stopnia  
Wobec tego, że <math>s</math> jest poza przedziałem <math>(a,b)</math> wielomianem stopnia  
co najwyżej <math>\displaystyle r-1</math> oraz <math>\displaystyle s^{(r)}</math> jest ciągła na <math>\displaystyle R</math>, mamy  
co najwyżej <math>r-1</math> oraz <math>s^{(r)}</math> jest ciągła na <math>R</math>, mamy  
<math>\displaystyle s^{(r)}(a)=0=s^{(r)}(b)</math>, a stąd  
<math>s^{(r)}(a)=0=s^{(r)}(b)</math>, a stąd  


<center><math>\displaystyle f^{(r-1)}(x)s^{(r)}(x)\Big |_a^b\,=\,0.  
<center><math>f^{(r-1)}(x)s^{(r)}(x)\Big |_a^b\,=\,0.  
</math></center>
</math></center>


Postępując podobnie, tzn. całkując przez części <math>\displaystyle r-1</math> razy,  
Postępując podobnie, tzn. całkując przez części <math>r-1</math> razy,  
otrzymujemy w końcu  
otrzymujemy w końcu  


<center><math>\displaystyle \int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,(-1)^{r-1}
<center><math>\int_a^b f^{(r)}(x)s^{(r)}(x)\,dx\,=\,(-1)^{r-1}
       \int_a^b f'(x)s^{(2r-1)}(x)\,dx.
       \int_a^b f'(x)s^{(2r-1)}(x)\,dx</math></center>
</math></center>


Funkcja <math>\displaystyle s^{(2r-1)}</math> jest przedziałami stała, a więc możemy  
Funkcja <math>s^{(2r-1)}</math> jest przedziałami stała, a więc możemy  
teraz zastosować ten sam argument jak dla <math>\displaystyle r=1</math>, aby pokazać,  
teraz zastosować ten sam argument jak dla <math>r=1</math>, aby pokazać,  
że ostatnia całka jest równa zeru.}}
że ostatnia całka jest równa zeru.}}


Linia 160: Linia 157:
{{twierdzenie|O istnieniu i jednoznaczności naturalnego splajnu interpolacyjnego|O istnieniu i jednoznaczności naturalnego splajnu interpolacyjnego|
{{twierdzenie|O istnieniu i jednoznaczności naturalnego splajnu interpolacyjnego|O istnieniu i jednoznaczności naturalnego splajnu interpolacyjnego|


Jeśli <math>\displaystyle n+1\ge r</math>, to dla dowolnej funkcji  
Jeśli <math>n+1\ge r</math>, to dla dowolnej funkcji  
<math>\displaystyle f:[a,b]\toR</math> istnieje dokładnie jedna naturalna funkcja sklejana  
<math>f:[a,b]\to R</math> istnieje dokładnie jedna naturalna funkcja sklejana  
<math>\displaystyle s_f\in {\cal S}_r</math> interpolująca <math>\displaystyle f</math> w węzłach <math>\displaystyle x_j</math>, tzn. taka,  
<math>s_f\in {\cal S}_r</math> interpolująca <math>f</math> w węzłach <math>x_j</math>, tzn. taka,  
że
że


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


}}
}}
Linia 173: Linia 169:
Pokażemy najpierw, że jedyną naturalną  
Pokażemy najpierw, że jedyną naturalną  
funkcją sklejaną interpolującą dane zerowe jest funkcja zerowa.  
funkcją sklejaną interpolującą dane zerowe jest funkcja zerowa.  
Rzeczywiście, jeśli <math>\displaystyle s(x_j)=0</math> dla <math>\displaystyle 0\le j\le n</math>, to podstawiając  
Rzeczywiście, jeśli <math>s(x_j)=0</math> dla <math>0\le j\le n</math>, to podstawiając  
w poprzednim lemacie <math>\displaystyle f = s</math>, otrzymujemy
w poprzednim lemacie <math>f = s</math>, otrzymujemy


<center><math>\displaystyle \int_a^b \Big(s^{(r)}(x)\Big)^2\,dx\,=\,0.
<center><math>\int_a^b \Big(s^{(r)}(x)\Big)^2\,dx\,=\,0</math></center>
</math></center>


Stąd <math>\displaystyle s^{(r)}</math> jest funkcją zerową, a więc <math>\displaystyle s</math> jest  
Stąd <math>s^{(r)}</math> jest funkcją zerową, a więc <math>s</math> jest  
wielomianem stopnia co najwyżej <math>\displaystyle r-1</math> zerującym się w co  
wielomianem stopnia co najwyżej <math>r-1</math> zerującym się w co  
najmniej <math>\displaystyle n+1</math> punktach <math>\displaystyle x_j</math>. Wobec tego, że <math>\displaystyle n+1>r-1</math>,  
najmniej <math>n+1</math> punktach <math>x_j</math>. Wobec tego, że <math>n+1>r-1</math>,  
otrzymujemy <math>\displaystyle s\equiv 0</math>.  
otrzymujemy <math>s\equiv 0</math>.  


Zauważmy teraz, że problem znalezienia naturalnej funkcji sklejanej  
Zauważmy teraz, że problem znalezienia naturalnej funkcji sklejanej  
<math>\displaystyle s</math> interpolującej <math>\displaystyle f</math> można sprowadzić do rozwiązania układu równań liniowych z macierzą kwadratową. Na każdym przedziale <math>\displaystyle [x_{i-1},x_i]</math>,  
<math>s</math> interpolującej <math>f</math> można sprowadzić do rozwiązania układu równań liniowych z macierzą kwadratową. Na każdym przedziale <math>[x_{i-1},x_i]</math>,  
<math>\displaystyle 1\le i\le n</math>, jest ona postaci  
<math>1\le i\le n</math>, jest ona postaci  


<center><math>\displaystyle s(x)\,=\,w_i(x)\,=\,\sum_{j=0}^{2r-1} a_{i,j}x^j,  
<center><math>s(x)\,=\,w_i(x)\,=\,\sum_{j=0}^{2r-1} a_{i,j}x^j,  
</math></center>
</math></center>


dla pewnych współczynników <math>\displaystyle a_{i,j}\inR</math>, a na  
dla pewnych współczynników <math>a_{i,j}\in R</math>, a na  
<math>\displaystyle (-\infty,a]</math> i <math>\displaystyle [b,\infty)</math> mamy odpowiednio  
<math>(-\infty,a]</math> i <math>[b,\infty)</math> mamy odpowiednio  


<center><math>\displaystyle s(x)\,=\,w_0(x)\,=\,\sum_{j=0}^{r-1} a_{0,j}x^j  
<center><math>s(x)\,=\,w_0(x)\,=\,\sum_{j=0}^{r-1} a_{0,j}x^j  
</math></center>
</math></center>


i
i


<center><math>\displaystyle s(x)\,=\,w_{n+1}(x)\,=\,\sum_{j=0}^{r-1} a_{n+1,j}x^j.  
<center><math>s(x)\,=\,w_{n+1}(x)\,=\,\sum_{j=0}^{r-1} a_{n+1,j}x^j.  
</math></center>
</math></center>


Aby wyznaczyć <math>\displaystyle s</math>, musimy więc znaleźć ogółem <math>\displaystyle 2r(n+1)</math>  
Aby wyznaczyć <math>s</math>, musimy więc znaleźć ogółem <math>2r(n+1)</math>  
współczynników <math>\displaystyle a_{i,j}</math>, przy czym są one związane  
współczynników <math>a_{i,j}</math>, przy czym są one związane  
<math>\displaystyle (2r-1)(n+1)</math> warunkami jednorodnymi wynikającymi z gładkości,
<math>(2r-1)(n+1)</math> warunkami jednorodnymi wynikającymi z gładkości,


<center><math>\displaystyle w_i^{(k)}(x_i)\,=\,w_{i+1}^{(k)}(x_i)  
<center><math>w_i^{(k)}(x_i)\,=\,w_{i+1}^{(k)}(x_i)  
</math></center>
</math></center>


dla <math>\displaystyle 0\le i\le n</math> i <math>\displaystyle 0\le k\le 2r-2</math>, oraz <math>\displaystyle n+1</math>  
dla <math>0\le i\le n</math> i <math>0\le k\le 2r-2</math>, oraz <math>n+1</math>  
niejednorodnymi warunkami interpolacyjnymi,
niejednorodnymi warunkami interpolacyjnymi,


<center><math>\displaystyle w_i(x_i)\,=\,f(x_i)
<center><math>w_i(x_i)\,=\,f(x_i)
</math></center>
</math></center>


dla <math>\displaystyle 0\le i\le n</math>. Otrzymujemy więc układ <math>\displaystyle 2r(n+1)</math>  
dla <math>0\le i\le n</math>. Otrzymujemy więc układ <math>2r(n+1)</math>  
równań liniowych ze względu na <math>\displaystyle 2r(n+1)</math> niewiadomych  
równań liniowych ze względu na <math>2r(n+1)</math> niewiadomych  
<math>\displaystyle a_{i,j}</math>.  
<math>a_{i,j}</math>.  


Naturalna funkcja sklejana interpolująca <math>\displaystyle f</math> jest wyznaczona jednoznacznie wtedy i tylko wtedy, gdy układ ten ma jednoznaczne rozwiązanie. To zaś zachodzi, gdy zero jest jedynym rozwiązaniem układu jednorodnego. Rzeczywiście, układ jednorodny odpowiada zerowym warunkom interpolacyjnym, przy których, jak pokazaliśmy wcześniej, zerowa funkcja sklejana (której odpowiada <math>\displaystyle a_{i,j}=0</math>, <math>\displaystyle \forall i,j</math>) jest jedynym rozwiązaniem zadania interpolacyjnego.}}
Naturalna funkcja sklejana interpolująca <math>f</math> jest wyznaczona jednoznacznie wtedy i tylko wtedy, gdy układ ten ma jednoznaczne rozwiązanie. To zaś zachodzi, gdy zero jest jedynym rozwiązaniem układu jednorodnego. Rzeczywiście, układ jednorodny odpowiada zerowym warunkom interpolacyjnym, przy których, jak pokazaliśmy wcześniej, zerowa funkcja sklejana (której odpowiada <math>a_{i,j}=0</math>, <math>\forall i,j</math>) jest jedynym rozwiązaniem zadania interpolacyjnego.}}


Naturalnych funkcji sklejanych możemy więc używać do  
Naturalnych funkcji sklejanych możemy więc używać do  
Linia 228: Linia 223:
{{twierdzenie|O ekstremalnej własności splajnów naturalnych|O ekstremalnej własności splajnów naturalnych|
{{twierdzenie|O ekstremalnej własności splajnów naturalnych|O ekstremalnej własności splajnów naturalnych|


Niech <math>\displaystyle f\in W^r(a,b)</math> i niech <math>\displaystyle s_f\in {\cal S}_r</math>
Niech <math>f\in W^r(a,b)</math> i niech <math>s_f\in {\cal S}_r</math>
będzie naturalną funkcją sklejaną rzędu <math>\displaystyle r</math> interpolującą  
będzie naturalną funkcją sklejaną rzędu <math>r</math> interpolującą  
<math>\displaystyle f</math> w węzłach <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>. Wtedy  
<math>f</math> w węzłach <math>x_j</math>, <math>0\le j\le n</math>. Wtedy  


<center><math>\displaystyle
<center><math>
   \int_a^b \Big(  f^{(r)}(x)\Big)^2\,dx\,\ge\,
   \int_a^b \Big(  f^{(r)}(x)\Big)^2\,dx\,\ge\,
   \int_a^b \Big(s_f^{(r)}(x)\Big)^2\,dx.  
   \int_a^b \Big(s_f^{(r)}(x)\Big)^2\,dx.  
Linia 240: Linia 235:


{{dowod|||
{{dowod|||
Jeśli przedstawimy <math>\displaystyle f</math> w postaci  
Jeśli przedstawimy <math>f</math> w postaci  
<math>\displaystyle f=s_f+(f-s_f)</math>, to  
<math>f=s_f+(f-s_f)</math>, to  


<center><math>\displaystyle \aligned \int_a^b\Big(f^{(r)}(x)\Big)^2\,dx   
<center><math>\begin{align} \int_a^b\Big(f^{(r)}(x)\Big)^2\,dx   
     &= \int_a^b\Big(s_f^{(r)}(x)\Big)^2\,dx\,+\,
     &= \int_a^b\Big(s_f^{(r)}(x)\Big)^2\,dx\,+\,
         \int_a^b\Big((f-s_f)^{(r)}(x)\Big)^2\,dx \\
         \int_a^b\Big((f-s_f)^{(r)}(x)\Big)^2\,dx \\
     & & \qquad\qquad + 2\,\int_a^b s_f^{(r)}(x)(f-s_f)^{(r)}(x)\,dx.  
     & & \qquad\qquad + 2\,\int_a^b s_f^{(r)}(x)(f-s_f)^{(r)}(x)\,dx.  
\endaligned</math></center>
\end{align}</math></center>


Funkcja <math>\displaystyle f-s_f</math> jest w klasie <math>\displaystyle W^r(a,b)</math> i zeruje się w węzłach  
Funkcja <math>f-s_f</math> jest w klasie <math>W^r(a,b)</math> i zeruje się w węzłach  
<math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>. Z lematu wynika więc, że  
<math>x_j</math>, <math>0\le j\le n</math>. Z lematu wynika więc, że  
<math>\displaystyle \int_a^b s_f^{(r)}(x)(f-s_f)^{(r)}(x)dx=0</math>, a stąd wynika teza.}}
<math>\int_a^b s_f^{(r)}(x)(f-s_f)^{(r)}(x)dx=0</math>, a stąd wynika teza.}}


Wartość całki <math>\displaystyle \int_a^b(f^{(r)}(x))^2 dx</math> może być w  
Wartość całki <math>\int_a^b(f^{(r)}(x))^2 dx</math> może być w  
ogólności uważana za miarę gładkości funkcji.  Dowiedzioną nierówność możemy więc zinterpretować w następujący sposób. Naturalna funkcja sklejana jest w  
ogólności uważana za miarę gładkości funkcji.  Dowiedzioną nierówność możemy więc zinterpretować w następujący sposób. Naturalna funkcja sklejana jest w  
klasie <math>\displaystyle W^r(a,b)</math> najgładszą funkcją spełniającą dane  
klasie <math>W^r(a,b)</math> najgładszą funkcją spełniającą dane  
warunki interpolacyjne w wybranych węzłach <math>\displaystyle x_j</math>.  
warunki interpolacyjne w wybranych węzłach <math>x_j</math>.  


Jak już wspomnieliśmy, najczęściej używanymi są kubiczne  
Jak już wspomnieliśmy, najczęściej używanymi są kubiczne  
funkcje sklejane. Dlatego rozpatrzymy je oddzielnie.  
funkcje sklejane. Dlatego rozpatrzymy je oddzielnie.


==Kubiczne funkcje sklejane==
==Kubiczne funkcje sklejane==


Jeśli zdecydowaliśmy się na użycie kubicznych funkcji  
Jeśli zdecydowaliśmy się na użycie kubicznych funkcji  
sklejanych, powstaje problem wyznaczenia <math>\displaystyle s_f\in{\cal S}_2</math>  
sklejanych, powstaje problem wyznaczenia <math>s_f\in{\cal S}_2</math>  
interpolującej daną funkcję <math>\displaystyle f</math>, tzn. takiej, że  
interpolującej daną funkcję <math>f</math>, tzn. takiej, że  
<math>\displaystyle s_f(x_i)=f(x_i)</math> dla <math>\displaystyle 0\le i\le n</math>. W tym celu, na każdym  
<math>s_f(x_i)=f(x_i)</math> dla <math>0\le i\le n</math>. W tym celu, na każdym  
przedziale <math>\displaystyle [x_i,x_{i+1}]</math> przedstawimy <math>\displaystyle s_f</math> w postaci jej  
przedziale <math>[x_i,x_{i+1}]</math> przedstawimy <math>s_f</math> w postaci jej  
rozwinięcia w szereg Taylora w punkcie <math>\displaystyle x_i</math>,
rozwinięcia w szereg Taylora w punkcie <math>x_i</math>,


<center><math>\displaystyle s_f(x)\,=\,w_i(x)\,=\,a_i+b_i(x-x_i)+
<center><math>s_f(x)\,=\,w_i(x)\,=\,a_i+b_i(x-x_i)+
     c_i\frac{(x-x_i)^2}2+d_i\frac{(x-x_i)^3}6,
     c_i\frac{(x-x_i)^2}2+d_i\frac{(x-x_i)^3}6</math>,</center>
</math></center>


i podamy algorytm obliczania <math>\displaystyle a_i,b_i,c_i,d_i</math>  
i podamy algorytm obliczania <math>a_i,b_i,c_i,d_i</math>  
dla <math>\displaystyle 0\le i\le n-1</math>.  
dla <math>0\le i\le n-1</math>.  


Warunki brzegowe i warunki ciągłości  
Warunki brzegowe i warunki ciągłości  
dla <math>\displaystyle s_f''</math> dają nam <math>\displaystyle w_0''(x_0)=0=w_{n-1}''(x_n)</math> oraz  
dla <math>s_f''</math> dają nam <math>w_0''(x_0)=0=w_{n-1}''(x_n)</math> oraz  
<math>\displaystyle w_i''(x_{i+1})=w_{i+1}''(x_{i+1})</math>, czyli  
<math>w_i''(x_{i+1})=w_{i+1}''(x_{i+1})</math>, czyli  


<center><math>\displaystyle \aligned c_0 &= 0, \\   
<center><math>\begin{align} c_0 &= 0, \\   
   c_i+d_ih_i &= c_{i+1}, \qquad 0\le i\le n-2, \\
   c_i+d_ih_i &= c_{i+1}, \qquad 0\le i\le n-2, \\
   c_{n-1}+d_{n-1}h_{n-1} &= 0,  
   c_{n-1}+d_{n-1}h_{n-1} &= 0,  
\endaligned</math></center>
\end{align}</math></center>


gdzie <math>\displaystyle h_i=x_{i+1}-x_i</math>. Stąd, przyjmując dodatkowo  
gdzie <math>h_i=x_{i+1}-x_i</math>. Stąd, przyjmując dodatkowo  
<math>\displaystyle c_n=0</math>, otrzymujemy  
<math>c_n=0</math>, otrzymujemy  


<center><math>\displaystyle
<center><math>
   d_i\,=\,\frac{c_{i+1}-c_i}{h_i},\qquad 1\le i\le n-1.
   d_i\,=\,\frac{c_{i+1}-c_i}{h_i},\qquad 1\le i\le n-1</math></center>
</math></center>


Z warunków ciągłości dla <math>\displaystyle s_f'</math> dostajemy z kolei  
Z warunków ciągłości dla <math>s_f'</math> dostajemy z kolei  


<center><math>\displaystyle b_i+c_ih_i+d_i\frac{h_i^2}{2}\,=\,b_{i+1},  
<center><math>b_i+c_ih_i+d_i\frac{h_i^2}{2}\,=\,b_{i+1},  
     \qquad 0\le i\le n-2,
     \qquad 0\le i\le n-2</math>,</center>
</math></center>


oraz  
oraz  


<center><math>\displaystyle
<center><math>
   b_{i+1}\,=\,b_i+h_i\frac{c_{i+1}+c_i}{2},  
   b_{i+1}\,=\,b_i+h_i\frac{c_{i+1}+c_i}{2},  
     \qquad 0\le i\le n-2.  
     \qquad 0\le i\le n-2.  
</math></center>
</math></center>


Warunki ciągłości <math>\displaystyle s_f</math> dają w końcu  
Warunki ciągłości <math>s_f</math> dają w końcu  


<center><math>\displaystyle
<center><math>
   a_i+b_ih_i+c_i\frac{h_i^2}{2}+d_i\frac{h_i^3}{6}\,=\,a_{i+1},  
   a_i+b_ih_i+c_i\frac{h_i^2}{2}+d_i\frac{h_i^3}{6}\,=\,a_{i+1},  
     \qquad 0\le i\le n-2.  
     \qquad 0\le i\le n-2.  
</math></center>
</math></center>


Powyższe równania definiują nam na odcinku <math>\displaystyle [a,b]</math> naturalną kubiczną funkcję  
Powyższe równania definiują nam na odcinku <math>[a,b]</math> naturalną kubiczną funkcję  
sklejaną. Ponieważ poszukiwana funkcja sklejana <math>\displaystyle s_f</math> ma interpolować <math>\displaystyle f</math>, mamy dodatkowych <math>\displaystyle n+1</math> warunków interpolacyjnych <math>\displaystyle w_i(x_i)=f(x_i)</math>, <math>\displaystyle 0\le i\le n-1</math>,  
sklejaną. Ponieważ poszukiwana funkcja sklejana <math>s_f</math> ma interpolować <math>f</math>, mamy dodatkowych <math>n+1</math> warunków interpolacyjnych <math>w_i(x_i)=f(x_i)</math>, <math>0\le i\le n-1</math>,  
oraz <math>\displaystyle w_{n-1}(x_n)=f(x_n)</math>, z których  
oraz <math>w_{n-1}(x_n)=f(x_n)</math>, z których  


<center><math>\displaystyle
<center><math>
   a_i\,=\,f(x_i), \qquad 0\le i\le n-1.
   a_i\,=\,f(x_i), \qquad 0\le i\le n-1</math></center>
</math></center>


Teraz możemy warunki ciągłości przepisać jako  
Teraz możemy warunki ciągłości przepisać jako  


<center><math>\displaystyle f(x_{i+1})\,=\,f(x_i)+b_ih_i+c_ih_i^2+d_i\frac{h_i^3}{6},
<center><math>f(x_{i+1})\,=\,f(x_i)+b_ih_i+c_ih_i^2+d_i\frac{h_i^3}{6}</math>,</center>
</math></center>


przy czym wzór ten zachodzi również dla <math>\displaystyle i=n-1</math>.  
przy czym wzór ten zachodzi również dla <math>i=n-1</math>.  
Po wyrugowaniu <math>\displaystyle b_i</math> i podstawieniu <math>\displaystyle d_i</math>,  
Po wyrugowaniu <math>b_i</math> i podstawieniu <math>d_i</math>,  
mamy  
mamy  


<center><math>\displaystyle
<center><math>
b_i\,=\,f(x_i,x_{i+1})+h_i\frac{c_{i+1}+2c_i}{6}, \qquad 0\le i\le n-1,  
b_i\,=\,f(x_i,x_{i+1})+h_i\frac{c_{i+1}+2c_i}{6}, \qquad 0\le i\le n-1,  
</math></center>
</math></center>


gdzie <math>\displaystyle f(x_i,x_{i+1})</math> jest odpowiednią różnicą  
gdzie <math>f(x_i,x_{i+1})</math> jest odpowiednią różnicą  
dzieloną. Możemy teraz powyższe wyrażenie na <math>\displaystyle b_i</math>  
dzieloną. Możemy teraz powyższe wyrażenie na <math>b_i</math>  
podstawić, aby otrzymać  
podstawić, aby otrzymać  


<center><math>\displaystyle c_i\frac{h_i}{6}+c_{i+1}\frac{h_i+h_{i+1}}{3}+c_{i+1}\frac{h_{i+1}}{6}
<center><math>c_i\frac{h_i}{6}+c_{i+1}\frac{h_i+h_{i+1}}{3}+c_{i+1}\frac{h_{i+1}}{6}
   \,=\,f(x_{i+1},x_{i+2})-f(x_i,x_{i+1}).  
   \,=\,f(x_{i+1},x_{i+2})-f(x_i,x_{i+1}).  
</math></center>
</math></center>
Linia 344: Linia 334:
Wprowadzając oznaczenie  
Wprowadzając oznaczenie  


<center><math>\displaystyle
<center><math>
c_i^*\,=\,\frac{c_i}{6},  
c_i^*\,=\,\frac{c_i}{6},  
</math></center>
</math></center>
Linia 350: Linia 340:
możemy to równanie przepisać jako
możemy to równanie przepisać jako


<center><math>\displaystyle \frac{h_i}{h_i+h_{i+1}}c_i^*\,+\,2\,c_{i+1}^*\,+\,
<center><math>\frac{h_i}{h_i+h_{i+1}}c_i^*\,+\,2\,c_{i+1}^*\,+\,
   \frac{h_{i+1}}{h_i+h_{i+1}}c_{i+2}^*\,=\,
   \frac{h_{i+1}}{h_i+h_{i+1}}c_{i+2}^*\,=\,
   f(x_i,x_{i+1},x_{i+2}),  
   f(x_i,x_{i+1},x_{i+2}),  
</math></center>
</math></center>


<math>\displaystyle 0\le i\le n-2</math>, albo w postaci macierzowej  
<math>0\le i\le n-2</math>, albo w postaci macierzowej  


<center><math>\displaystyle
<center><math>
\left(\begin{array} {cccccc}
\left(\begin{array} {cccccc}
     2  & w_1 \\
     2  & w_1 \\
Linia 371: Linia 361:
   \left(\begin{array} {c}
   \left(\begin{array} {c}
     v_1\\ v_2\\ v_3\\ \vdots\\ v_{n-2}\\ v_{n-1}
     v_1\\ v_2\\ v_3\\ \vdots\\ v_{n-2}\\ v_{n-1}
       \end{array} \right),
       \end{array} \right)</math>,</center>
</math></center>


gdzie  
gdzie  


<center><math>\displaystyle \aligned && u_i\,=\,\frac{h_{i-1}}{h_{i-1}+h_i},\qquad  
<center><math>\begin{align} && u_i\,=\,\frac{h_{i-1}}{h_{i-1}+h_i},\qquad  
     w_i\,=\,\frac{h_i}{h_{i-1}+h_i}, \\
     w_i\,=\,\frac{h_i}{h_{i-1}+h_i}, \\
   && v_i\,=\,f(x_{i-1},x_i,x_{i+1}).  
   && v_i\,=\,f(x_{i-1},x_i,x_{i+1}).  
\endaligned</math></center>
\end{align}</math></center>


Ostatecznie, aby znaleźć współczynniki <math>\displaystyle a_i,b_i,c_i,d_i</math>  
Ostatecznie, aby znaleźć współczynniki <math>a_i,b_i,c_i,d_i</math>  
należy najpierw rozwiązać układ równań liniowych,  
należy najpierw rozwiązać układ równań liniowych,  
a potem zastosować wzory definiujące pozostałe współczynniki.  
a potem zastosować wzory definiujące pozostałe współczynniki.  


Zauważmy, że macierz układu równań liniowych jest trójdiagonalna i ma dominującą przekątną. Układ  można więc rozwiązać kosztem proporcjonalnym do wymiaru <math>\displaystyle n</math> używając [[MN08#Macierze trójdiagonalne|algorytmu przeganiania]]. Koszt znalezienia wszystkich współczynników kubicznej funkcji sklejanej interpolującej <math>\displaystyle f</math> jest więc też proporcjonalny do <math>\displaystyle n</math>.  
Zauważmy, że macierz układu równań liniowych jest trójdiagonalna i ma dominującą przekątną. Układ  można więc rozwiązać kosztem proporcjonalnym do wymiaru <math>n</math> używając [[MN08#Macierze trójdiagonalne|algorytmu przeganiania]]. Koszt znalezienia wszystkich współczynników kubicznej funkcji sklejanej interpolującej <math>f</math> jest więc też proporcjonalny do <math>n</math>.  


MATLAB i Octave mają wbudowaną funkcję wyznaczającą naturalny kubiczny splajn interpolujący zadane wartości:
MATLAB i Octave mają wbudowaną funkcję wyznaczającą naturalny kubiczny splajn interpolujący zadane wartości:
Linia 392: Linia 381:
</pre></div>  
</pre></div>  
   
   
Aby wyznaczyć wartości takiego splajnu w zadanych punktach <math>\displaystyle X</math>, także musimy użyć specjalnej funkcji,
Aby wyznaczyć wartości takiego splajnu 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 = ppval(s,X);
  <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>Y = ppval(s,X);
Linia 398: Linia 387:
   
   
Na końcu oszacujemy jeszcze błąd interpolacji naturalnymi  
Na końcu oszacujemy jeszcze błąd interpolacji naturalnymi  
kubicznymi funkcjami sklejanymi na przedziale <math>\displaystyle [a,b]</math>.  
kubicznymi funkcjami sklejanymi na przedziale <math>[a,b]</math>.  
Będziemy zakładać, że <math>\displaystyle f</math> jest dwa razy  
Będziemy zakładać, że <math>f</math> jest dwa razy  
różniczkowalna w sposób ciągły.
różniczkowalna w sposób ciągły.


{{twierdzenie|O błędzie interpolacji splajnem kubicznym|O błędzie interpolacji splajnem kubicznym|
{{twierdzenie|O błędzie interpolacji splajnem kubicznym|O błędzie interpolacji splajnem kubicznym|


Jeśli <math>\displaystyle f\in F^1_M([a,b])</math> to  
Jeśli <math>f\in F^1_M([a,b])</math> to  


<center><math>\displaystyle \|f-s_f\|_{C([a,b])}\,\le\,5\,M\,
<center><math>\|f-s_f\|_{C([a,b])}\,\le\,5\,M\,
       \max_{1\le i\le n}(x_i-x_{i-1})^2.
       \max_{1\le i\le n}(x_i-x_{i-1})^2</math></center>
</math></center>


W szczególności, dla podziału równomiernego  
W szczególności, dla podziału równomiernego  
<math>\displaystyle x_i=a+i\frac{b-a}{n}</math>, <math>\displaystyle 0\le i\le n</math>, mamy  
<math>x_i=a+i\frac{b-a}{n}</math>, <math>0\le i\le n</math>, mamy  


<center><math>\displaystyle \|f-s_f\|_{ C([a,b])}\,\le\,
<center><math>\|f-s_f\|_{ C([a,b])}\,\le\,
       5\,M\,\Big(\frac{b-a}n\Big)^2.  
       5\,M\,\Big(\frac{b-a}n\Big)^2.  
</math></center>
</math></center>
Linia 421: Linia 409:
{{dowod|||
{{dowod|||
Wykorzystamy obliczoną wcześniej   
Wykorzystamy obliczoną wcześniej   
postać interpolującej funkcji sklejanej <math>\displaystyle s_f</math>.  
postać interpolującej funkcji sklejanej <math>s_f</math>.  
Dla <math>\displaystyle x\in [x_i,x_{i+1}]</math> mamy  
Dla <math>x\in [x_i,x_{i+1}]</math> mamy  


<center><math>\displaystyle \aligned w_i(x) &= f(x_i)\,+\,\left(\frac{f(x_{i+1})-f(x_i)}{h_i} -h_i(c_{i+1}^*+2c_i^*)\right)(x-x_i) \\ &&\qquad\qquad \,+\, 3c_i^*(x-x_i)^2\,+\,\frac{c_{i+1}^*-c_i^*}{h_i}(x-x_i)^3.
<center><math>\begin{align} w_i(x) &= f(x_i)\,+\,\left(\frac{f(x_{i+1})-f(x_i)}{h_i} -h_i(c_{i+1}^*+2c_i^*)\right)(x-x_i) \\ &&\qquad\qquad \,+\, 3c_i^*(x-x_i)^2\,+\,\frac{c_{i+1}^*-c_i^*}{h_i}(x-x_i)^3.
\endaligned</math></center>
\end{align}</math></center>


Z rozwinięcia <math>\displaystyle f</math> w szereg Taylora w punkcie <math>\displaystyle x_i</math> dostajemy  
Z rozwinięcia <math>f</math> w szereg Taylora w punkcie <math>x_i</math> dostajemy  
<math>\displaystyle f(x)=f(x_i)+f'(x_i)(x-x_i)+f''(\xi_1)(x-x_i)^2/2</math> oraz  
<math>f(x)=f(x_i)+f'(x_i)(x-x_i)+f''(\xi_1)(x-x_i)^2/2</math> oraz  
<math>\displaystyle (f(x_{i+1})-f(x_i))/h_i=f'(x_i)+h_if''(\xi_2)/2</math>. Stąd  
<math>(f(x_{i+1})-f(x_i))/h_i=f'(x_i)+h_if''(\xi_2)/2</math>. Stąd  


<center><math>\displaystyle \aligned \lefteqn{f(x)-s_f(x) \,=\, f(x)-w_i(x)} \\
<center><math>\begin{align} f(x)-s_f(x) \,=\, f(x)-w_i(x) \\
   &= \frac{f''(\xi_1)}2(x-x_i)^2-\left(\frac{f''(\xi_2)}2
   &= \frac{f''(\xi_1)}2(x-x_i)^2-\left(\frac{f''(\xi_2)}2
       -(c_{i+1}^*+2c_i^*)\right)h_i(x-x_i) \\
       -(c_{i+1}^*+2c_i^*)\right)h_i(x-x_i) \\
   & & \qquad\qquad\qquad -3c_i^*(x-x_i)^2
   & & \qquad\qquad\qquad -3c_i^*(x-x_i)^2
       -\frac{c_{i+1}^*-c_i^*}{h_i}(x-x_i)^3,
       -\frac{c_{i+1}^*-c_i^*}{h_i}(x-x_i)^3,
\endaligned</math></center>
\end{align}</math></center>


oraz  
oraz  


<center><math>\displaystyle \aligned
<center><math>\begin{align}
|f(x)-s_f(x)| &\le &(M+2|c_{i+1}^*|+6|c_i^*|)h_i^2 \\
|f(x)-s_f(x)| &\le &(M+2|c_{i+1}^*|+6|c_i^*|)h_i^2 \\
     &= (M+8\max_{1\le i\le n-1}|c_i^*|)h_i^2.  
     &= (M+8\max_{1\le i\le n-1}|c_i^*|)h_i^2.  
\endaligned</math></center>
\end{align}</math></center>


Niech teraz <math>\displaystyle \max_{1\le i\le n-1}|c_i^*|=|c_s^*|</math>.  
Niech teraz <math>\max_{1\le i\le n-1}|c_i^*|=|c_s^*|</math>.  
Z postaci układu otrzymujemy  
Z postaci układu otrzymujemy  


<center><math>\displaystyle \aligned |c_s^*| &= 2|c_s^*|-|c_s^*|(u_s+w_s) \,\le\,
<center><math>\begin{align} |c_s^*| &= 2|c_s^*|-|c_s^*|(u_s+w_s) \,\le\,
     |u_sc_{s-1}^*+2c_s^*+w_sc_{s+1}| \\
     |u_sc_{s-1}^*+2c_s^*+w_sc_{s+1}| \\
   &= |f(x_{s-1},x_s,x_{s+1})|\,\le\,
   &= |f(x_{s-1},x_s,x_{s+1})|\,\le\,
       \Big|\frac{f''(\xi_3)}2\Big|\,\le\,\frac 12 M,  
       \Big|\frac{f''(\xi_3)}2\Big|\,\le\,\frac 12 M,  
\endaligned</math></center>
\end{align}</math></center>


a stąd
a stąd


<center><math>\displaystyle |f(x)-s_f(x)|\,\le\, 5\, M\, h_i^2,  
<center><math>|f(x)-s_f(x)|\,\le\, 5\, M\, h_i^2,  
</math></center>
</math></center>


Linia 470: Linia 458:
[[Image:MNrunge17czebyspline.png|thumb|550px|center|Interpolacja splajnowa wydaje się lepiej spełniać zadanie odtworzenia kształtu funkcji]]
[[Image:MNrunge17czebyspline.png|thumb|550px|center|Interpolacja splajnowa wydaje się lepiej spełniać zadanie odtworzenia kształtu funkcji]]


Jak widać, w przeciwieństwie do wielomianu interpolacyjnego, splajn interpolacyjny praktycznie pokrywa się z wykresem funkcji, tutaj: <math>\displaystyle f(x) = \frac{1}{1+x^2}</math>.
Jak widać, w przeciwieństwie do wielomianu interpolacyjnego, splajn interpolacyjny praktycznie pokrywa się z wykresem funkcji, tutaj: <math>f(x) = \frac{1}{1+x^2}</math>.


</div></div>
</div></div>
Linia 480: Linia 468:
Niech  
Niech  


<center><math>\displaystyle W^r_M(a,b)\,=\,\Big\{\,f\in W^r(a,b):\,
<center><math>W^r_M(a,b)\,=\,\Big\{\,f\in W^r(a,b):\,
     \int_a^b\left(f^{(r)}(x)\right)^2\,dx\le M\,\Big\}.
     \int_a^b\left(f^{(r)}(x)\right)^2\,dx\le M\,\Big\}</math></center>
</math></center>


Ustalmy węzły <math>\displaystyle a=x_0<\cdots<x_n=b</math>. Dla <math>\displaystyle f\in W^r_M(a,b)</math>, niech <math>\displaystyle s_f</math> będzie naturalną funkcją sklejaną interpolującą <math>\displaystyle f</math> w <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>, a <math>\displaystyle a_f</math> dowolną inną aproksymacją korzystającą jedynie z informacji o wartościach <math>\displaystyle f</math> w tych węzłach, tzn.
Ustalmy węzły <math>a=x_0<\cdots<x_n=b</math>. Dla <math>f\in W^r_M(a,b)</math>, niech <math>s_f</math> będzie naturalną funkcją sklejaną interpolującą <math>f</math> w <math>x_j</math>, <math>0\le j\le n</math>, a <math>a_f</math> dowolną inną aproksymacją korzystającą jedynie z informacji o wartościach <math>f</math> w tych węzłach, tzn.


<center><math>\displaystyle a_f\,=\,\phi(f(x_0),\ldots,f(x_n)).
<center><math>a_f\,=\,\phi(f(x_0),\ldots,f(x_n))</math></center>
</math></center>


Załóżmy, że błąd aproksymacji mierzymy nie w normie Czebyszewa, ale w normie średniokwadratowej zdefiniowanej jako  
Załóżmy, że błąd aproksymacji mierzymy nie w normie Czebyszewa, ale w normie średniokwadratowej zdefiniowanej jako  


<center><math>\displaystyle \|g\|_{{\cal L}_2(a,b)}\,=\,\sqrt{\int_a^b (g(x))^2\,dx}.  
<center><math>\|g\|_{{\cal L}_2(a,b)}\,=\,\sqrt{\int_a^b (g(x))^2\,dx}.  
</math></center>
</math></center>


Wtedy  
Wtedy  


<center><math>\displaystyle \sup_{f\in W^r_M(a,b)}\|f-s_f\|_{{\cal L}_2(a,b)}\,\le\,
<center><math>\sup_{f\in W^r_M(a,b)}\|f-s_f\|_{{\cal L}_2(a,b)}\,\le\,
   \sup_{f\in W^r_M(a,b)}\|f-a_f\|_{{\cal L}_2(a,b)}.  
   \sup_{f\in W^r_M(a,b)}\|f-a_f\|_{{\cal L}_2(a,b)}.  
</math></center>
</math></center>


Aproksymacja naturalnymi funkcjami sklejanymi jest więc optymalna w klasie <math>\displaystyle W^r_M(a,b)</math>.  
Aproksymacja naturalnymi funkcjami sklejanymi jest więc optymalna w klasie <math>W^r_M(a,b)</math>.  


Można również pokazać, że interpolacja <math>\displaystyle s_f^*</math> naturalnymi funkcjami sklejanymi na węzłach równoodległych <math>\displaystyle x_j=a+(b-a)j/ń</math>, <math>\displaystyle 0\le j\le n</math>, jest optymalna co do  
Można również pokazać, że interpolacja <math>s_f^*</math> naturalnymi funkcjami sklejanymi na węzłach równoodległych <math>x_j=a+(b-a)j/n</math>, <math>0\le j\le n</math>, jest optymalna co do  
rzędu w klasie <math>\displaystyle W^r_M(a,b)</math>, wśród wszystkich aproksymacji korzystających jedynie z informacji o wartościach funkcji w <math>\displaystyle n+1</math> dowolnych punktach, oraz  
rzędu w klasie <math>W^r_M(a,b)</math>, wśród wszystkich aproksymacji korzystających jedynie z informacji o wartościach funkcji w <math>n+1</math> dowolnych punktach, oraz  


<center><math>\displaystyle \max_{f\in W^r_M(a,b)}\|f-s^*_f\|_{{\cal L}_2(a,b)}
<center><math>\max_{f\in W^r_M(a,b)}\|f-s^*_f\|_{{\cal L}_2(a,b)}
     \,\asymp\,n^{-r}.  
     \,\asymp\,n^{-r}.  
</math></center>
</math></center>
Linia 516: Linia 502:


Tak jak wielomiany, naturalne funkcje sklejane interpolujące dane funkcje można  
Tak jak wielomiany, naturalne funkcje sklejane interpolujące dane funkcje można  
reprezentować przez ich współczynniki w różnych bazach. Do tego celu można na przykład użyć bazy kanonicznej <math>\displaystyle K_j</math>, <math>\displaystyle 0\le j\le n</math> zdefiniowanej równościami  
reprezentować przez ich współczynniki w różnych bazach. Do tego celu można na przykład użyć bazy kanonicznej <math>K_j</math>, <math>0\le j\le n</math> zdefiniowanej równościami  


<center><math>\displaystyle K_j(x_i)\,=\,\left\{\begin{array} {ll}
<center><math>K_j(x_i)\,=\,\left\{\begin{array} {ll}
         0 &\quad i\ne j, \\
         0 &\quad i\ne j, \\
         1 &\quad i=j, \end{array} \right.
         1 &\quad i=j, \end{array} \right.</math></center>
</math></center>


przy której <math>\displaystyle s_f(x)=\sum_{j=0}^n f(x_j)K_j(x)</math>. Baza kanoniczna jest jednak niewygodna w użyciu, bo funkcje <math>\displaystyle K_j</math> w ogólności nie zerują się na żadnym podprzedziale, a tym samym manipulowanie nimi jest utrudnione.  
przy której <math>s_f(x)=\sum_{j=0}^n f(x_j)K_j(x)</math>. Baza kanoniczna jest jednak niewygodna w użyciu, bo funkcje <math>K_j</math> w ogólności nie zerują się na żadnym podprzedziale, a tym samym manipulowanie nimi jest utrudnione.  


Częściej używa się bazy B-sklejanej. Można ją zdefiniować dla splajnów dowolnego rzędu za pomocą wzoru rekurencyjnego (przyjmując, że dla dowolnego <math>\displaystyle i</math>, <math>\displaystyle x_i < x_{i+1}</math>):
Częściej używa się bazy B-sklejanej. Można ją zdefiniować dla splajnów dowolnego rzędu za pomocą wzoru rekurencyjnego (przyjmując, że dla dowolnego <math>i</math>, <math>x_i < x_{i+1}</math>):


<center><math>\displaystyle B_i^0(x) = \left\{ \beginmatrix 1, &  \mbox{ jeśli }  x_i \leq x < x_{i+1},\\
<center><math>B_i^0(x) = \left\{ \begin{matrix} 1, &  \mbox{ jeśli }  x_i \leq x < x_{i+1},\\
0, &  \mbox{ w przeciwnym przypadku} ;
0, &  \mbox{ w przeciwnym przypadku} ;
\endmatrix
\end{matrix}
\right.
\right.</math></center>
</math></center>


<center><math>\displaystyle B_i^r(x) &= \frac{x-x_i}{x_{i+r}-x_i} B_i^{r-1}(x) +
<center><math>B_i^r(x) = \frac{x-x_i}{x_{i+r}-x_i} B_i^{r-1}(x) +
\frac{x_{i+r+1}-x}{x_{i+r+1}-x_{i+1}} B_{i+1}^{r-1}(x).
\frac{x_{i+r+1}-x}{x_{i+r+1}-x_{i+1}} B_{i+1}^{r-1}(x)</math></center>
</math></center>


W przypadku naturalnych splajnów kubicznych, <math>\displaystyle r=2</math>, baza B-sklejana jest jawnie zdefiniowana przez następujące warunki:  
W przypadku naturalnych splajnów kubicznych, <math>r=2</math>, baza B-sklejana jest jawnie zdefiniowana przez następujące warunki:  


<center><math>\displaystyle \aligned B_j(x_j) &= 1, \qquad \mbox{ dla  }  0\le j\le n, \\
<center><math>\begin{align} B_j(x_j) &= 1, \qquad \mbox{ dla  }  0\le j\le n, \\
     B_j(x) &= 0,\qquad \mbox{ dla  }  x\le x_{j-2}, j\ge 2,
     B_j(x) &= 0,\qquad \mbox{ dla  }  x\le x_{j-2}, j\ge 2,
       \mbox{  oraz  dla  }  x\ge x_{j+2}, j\le n-2.   
       \mbox{  oraz  dla  }  x\ge x_{j+2}, j\le n-2.   
\endaligned</math></center>
\end{align}</math></center>


Dla <math>\displaystyle B_0</math> i <math>\displaystyle B_1</math> dodatkowo żądamy, aby  
Dla <math>B_0</math> i <math>B_1</math> dodatkowo żądamy, aby  


<center><math>\displaystyle B_0''(x_0)\,=\,0\,=\,B_1''(x_0),\qquad B_1(x_0)\,=\,0,  
<center><math>B_0''(x_0)\,=\,0\,=\,B_1''(x_0),\qquad B_1(x_0)\,=\,0,  
</math></center>
</math></center>


a dla <math>\displaystyle B_{n-1}</math> i <math>\displaystyle B_n</math> podobnie  
a dla <math>B_{n-1}</math> i <math>B_n</math> podobnie  


<center><math>\displaystyle B_{n-1}''(x_n)\,=\,0\,=\,B_n''(x_n),
<center><math>B_{n-1}''(x_n)\,=\,0\,=\,B_n''(x_n),
       \qquad B_{n-1}(x_{n-1})\,=\,0.
       \qquad B_{n-1}(x_{n-1})\,=\,0</math></center>
</math></center>


Wtedy <math>\displaystyle B_j</math> nie zeruje się tylko na przedziale  
Wtedy <math>B_j</math> nie zeruje się tylko na przedziale  
<math>\displaystyle (x_{j-2},x_{j+2})</math>. Wyznaczenie współczynników  
<math>(x_{j-2},x_{j+2})</math>. Wyznaczenie współczynników  
rozwinięcia w bazie <math>\displaystyle \{B_i\}_{i=0}^n</math> funkcji sklejanej  
rozwinięcia w bazie <math>\{B_i\}_{i=0}^n</math> funkcji sklejanej  
interpolującej <math>\displaystyle f</math> wymaga rozwiązania układu liniowego  
interpolującej <math>f</math> wymaga rozwiązania układu liniowego  
z macierzą trójdiagonalną <math>\displaystyle \{B_j(x_i)\}_{i,j=0}^n</math>, a  
z macierzą trójdiagonalną <math>\{B_j(x_i)\}_{i,j=0}^n</math>, a  
więc koszt obliczenia tych współczynników jest  
więc koszt obliczenia tych współczynników jest  
proporcjonalny do <math>\displaystyle n</math>.  
proporcjonalny do <math>n</math>.  
</div></div>
</div></div>


Linia 568: Linia 550:
<div class="solution" style="margin-left,margin-right:3em;">
<div class="solution" style="margin-left,margin-right:3em;">


Oprócz naturalnych funkcji sklejanych często rozpatruje się też <strong>okresowe funkcje sklejane</strong>. Są to funkcje <math>\displaystyle \tilde s:R\toR</math> spełniające  warunki '''(i)''', '''(ii)''' \link{splinedef}{definicji funkcji sklejanej}, oraz warunek:  
Oprócz naturalnych funkcji sklejanych często rozpatruje się też <strong>okresowe funkcje sklejane</strong>. Są to funkcje <math>\tilde s:R\to R</math> spełniające  warunki '''(i)''', '''(ii)''' \link{splinedef}{definicji funkcji sklejanej}, oraz warunek:  
    
    
; (iii)'
; (iii)'
:  <math>\displaystyle \tilde s^{(i)}</math> jest dla <math>\displaystyle 0\le i\le r-1</math>  
:  <math>\tilde s^{(i)}</math> jest dla <math>0\le i\le r-1</math>  
funkcją okresową o okresie <math>\displaystyle (b-a)</math>, tzn.  
funkcją okresową o okresie <math>(b-a)</math>, tzn.  
<math>\displaystyle \tilde s^{(i)}(x)=\tilde s^{(i)}(x+(b-a))</math>, <math>\displaystyle \forall x</math>.  
<math>\tilde s^{(i)}(x)=\tilde s^{(i)}(x+(b-a))</math>, <math>\forall x</math>.  
   
   
Klasę okresowych funkcji sklejanych rzędu <math>\displaystyle r</math> oznaczymy przez <math>\displaystyle \widetilde{\cal S}_r</math>. Funkcje te mają podobne własności jak naturalne funkcje sklejane. Dokładniej, niech  
Klasę okresowych funkcji sklejanych rzędu <math>r</math> oznaczymy przez <math>\widetilde{\cal S}_r</math>. Funkcje te mają podobne własności jak naturalne funkcje sklejane. Dokładniej, niech  


<center><math>\displaystyle
<center><math>
\tilde W^r(a,b)\,=\,\{\,f\in W^r(a,b):\,  f^{(i)}(a)=f^{(i)}(b),\; 0\le i\le r-1\,\},
\tilde W^r(a,b)\,=\,\{\,f\in W^r(a,b):\,  f^{(i)}(a)=f^{(i)}(b),\; 0\le i\le r-1\,\}</math>,</center>
</math></center>


tzn. <math>\displaystyle \tilde W^r(a,b)</math> jest klasą funkcji z <math>\displaystyle W^r(a,b)</math>, które można przedłużyć do funkcji, krórych wszystkie pochodne do rzędu <math>\displaystyle r-1</math> włącznie są <math>\displaystyle (b-a)</math>-okresowe na <math>\displaystyle R</math>. Wtedy dla dowolnej funkcji <math>\displaystyle f\in\tilde W^r(a,b)</math>  
tzn. <math>\tilde W^r(a,b)</math> jest klasą funkcji z <math>W^r(a,b)</math>, które można przedłużyć do funkcji, krórych wszystkie pochodne do rzędu <math>r-1</math> włącznie są <math>(b-a)</math>-okresowe na <math>R</math>. Wtedy dla dowolnej funkcji <math>f\in\tilde W^r(a,b)</math>  
zerującej się w węzłach <math>\displaystyle x_j</math>, oraz dla dowolnej  <math>\displaystyle \tilde s\in\widetilde{\cal S}_r</math> mamy  
zerującej się w węzłach <math>x_j</math>, oraz dla dowolnej  <math>\tilde s\in\widetilde{\cal S}_r</math> mamy  


<center><math>\displaystyle
<center><math>
\int_a^b f^{(r)}(x)\tilde s^{(r)}(x)\,dx\,=\,0.  
\int_a^b f^{(r)}(x)\tilde s^{(r)}(x)\,dx\,=\,0.  
</math></center>
</math></center>


Wynika z niego jednoznaczność rozwiązania zadania interpolacyjnego dla okresowych funkcji <math>\displaystyle f</math> (tzn. takich, że <math>\displaystyle f(a)=f(b)</math>), jak również odpowiednia własność minimalizacyjna okresowych funkcji sklejanych. Dokładniej, jeśli <math>\displaystyle f\in\tilde W^r(a,b)</math> oraz <math>\displaystyle \tilde s_f\in\widetilde{\cal S}_r</math> interpoluje <math>\displaystyle f</math> w węzłach <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>, to  
Wynika z niego jednoznaczność rozwiązania zadania interpolacyjnego dla okresowych funkcji <math>f</math> (tzn. takich, że <math>f(a)=f(b)</math>), jak również odpowiednia własność minimalizacyjna okresowych funkcji sklejanych. Dokładniej, jeśli <math>f\in\tilde W^r(a,b)</math> oraz <math>\tilde s_f\in\widetilde{\cal S}_r</math> interpoluje <math>f</math> w węzłach <math>x_j</math>, <math>0\le j\le n</math>, to  


<center><math>\displaystyle \int_a^b \Big(  f^{(r)}(x)\Big)^2\,dx\,\ge\,
<center><math>\int_a^b \Big(  f^{(r)}(x)\Big)^2\,dx\,\ge\,
   \int_a^b \Big(\tilde s_f^{(r)}(x)\Big)^2\,dx.  
   \int_a^b \Big(\tilde s_f^{(r)}(x)\Big)^2\,dx.  
</math></center>
</math></center>
Linia 601: Linia 582:
w następujący sposób.  
w następujący sposób.  


Niech <math>\displaystyle F</math> będzie pewną przestrzenią liniową funkcji <math>\displaystyle f:[a,b]\toR</math>, w której określona została norma <math>\displaystyle \|\cdot\|</math>. Niech <math>\displaystyle V_n\subset F</math> będzie podprzestrzenią
Niech <math>F</math> będzie pewną przestrzenią liniową funkcji <math>f:[a,b]\to R</math>, w której określona została norma <math>\|\cdot\|</math>. Niech <math>V_n\subset F</math> będzie podprzestrzenią
w <math>\displaystyle F</math> wymiaru <math>\displaystyle n</math>. Dla danej <math>\displaystyle f\in F</math>, należy znaleźć funkcję <math>\displaystyle v_f\in F</math> taką, że  
w <math>F</math> wymiaru <math>n</math>. Dla danej <math>f\in F</math>, należy znaleźć funkcję <math>v_f\in F</math> taką, że  


<center><math>\displaystyle \|f-v_f\|\,=\,\min_{v\in V_n}\|f-v\|.  
<center><math>\|f-v_f\|\,=\,\min_{v\in V_n}\|f-v\|.  
</math></center>
</math></center>


Okazuje się, że tak postawione zadanie ma rozwiązanie <math>\displaystyle v_f</math>, choć nie zawsze jest ono wyznaczone jednoznacznie.  
Okazuje się, że tak postawione zadanie ma rozwiązanie <math>v_f</math>, choć nie zawsze jest ono wyznaczone jednoznacznie.  


Jako przykład, rozpatrzmy <math>\displaystyle F=W^r(a,b)</math>. Utożsamiając funkcje <math>\displaystyle f_1,f_2\in W^r(a,b)</math> takie, że <math>\displaystyle f_1(x)-f_2(x) \in\Pi_{r-1}</math>, zdefiniujemy w <math>\displaystyle W^r(a,b)</math> normę  
Jako przykład, rozpatrzmy <math>F=W^r(a,b)</math>. Utożsamiając funkcje <math>f_1,f_2\in W^r(a,b)</math> takie, że <math>f_1(x)-f_2(x) \in\Pi_{r-1}</math>, zdefiniujemy w <math>W^r(a,b)</math> normę  


<center><math>\displaystyle \|f\|\,=\,\sqrt{\int_a^b\left(f^{(r)}(x)\right)^2\,dx}.   
<center><math>\|f\|\,=\,\sqrt{\int_a^b\left(f^{(r)}(x)\right)^2\,dx}.   
</math></center>
</math></center>


Dla ustalonych węzłów <math>\displaystyle a=x_0<\cdots<x_n=b</math>, niech  
Dla ustalonych węzłów <math>a=x_0<\cdots<x_n=b</math>, niech  


<center><math>\displaystyle V_{n+1}\,=\,{\cal S}_r
<center><math>V_{n+1}\,=\,{\cal S}_r
</math></center>
</math></center>


będzie podprzestrzenią w <math>\displaystyle W^r(a,b)</math> naturalnych funkcji sklejanych rzędu <math>\displaystyle r</math> opartych węzłach <math>\displaystyle x_j</math>, <math>\displaystyle 0\le j\le n</math>. Oczywiście <math>\displaystyle  \mbox{dim} {\cal S}_r=n+1</math>, co wynika z jednoznaczności rozwiązania w <math>\displaystyle {\cal S}_r</math> zadania interpolacji. Okazuje się, że wtedy optymalną dla <math>\displaystyle f\in W^r(a,b)</math> jest naturalna funkcja sklejana <math>\displaystyle s_f</math> interpolująca <math>\displaystyle f</math> w węzłach <math>\displaystyle x_j</math>, tzn.  
będzie podprzestrzenią w <math>W^r(a,b)</math> naturalnych funkcji sklejanych rzędu <math>r</math> opartych węzłach <math>x_j</math>, <math>0\le j\le n</math>. Oczywiście <math>\mbox{dim} {\cal S}_r=n+1</math>, co wynika z jednoznaczności rozwiązania w <math>{\cal S}_r</math> zadania interpolacji. Okazuje się, że wtedy optymalną dla <math>f\in W^r(a,b)</math> jest naturalna funkcja sklejana <math>s_f</math> interpolująca <math>f</math> w węzłach <math>x_j</math>, tzn.  


<center><math>\displaystyle \|f-s_f\|\,=\,\min_{s\in {\cal S}_r}\|f-s\|.  
<center><math>\|f-s_f\|\,=\,\min_{s\in {\cal S}_r}\|f-s\|.  
</math></center>
</math></center>


Rzeczywiście, ponieważ norma w przestrzeni <math>\displaystyle W^r(a,b)</math> generowana jest przez iloczyn skalarny  
Rzeczywiście, ponieważ norma w przestrzeni <math>W^r(a,b)</math> generowana jest przez iloczyn skalarny  


<center><math>\displaystyle (f_1,f_2)\,=\,
<center><math>(f_1,f_2)\,=\,
     \int_a^b f_1^{(r)}(x)f_2^{(r)}(x)\,dx,  
     \int_a^b f_1^{(r)}(x)f_2^{(r)}(x)\,dx,  
</math></center>
</math></center>


jest to przestrzeń unitarna. Znane twierdzenie mówi, że w przestrzeni unitarnej najbliższą danej <math>\displaystyle f</math> funkcją w dowolnej domkniętej podprzestrzeni <math>\displaystyle V</math> jest rzut  
jest to przestrzeń unitarna. Znane twierdzenie mówi, że w przestrzeni unitarnej najbliższą danej <math>f</math> funkcją w dowolnej domkniętej podprzestrzeni <math>V</math> jest rzut  
prostopadły <math>\displaystyle f</math> na <math>\displaystyle V</math>, albo równoważnie, taka funkcja <math>\displaystyle v_f\in V_{n+1}</math>, że iloczyn skalarny  
prostopadły <math>f</math> na <math>V</math>, albo równoważnie, taka funkcja <math>v_f\in V_{n+1}</math>, że iloczyn skalarny  


<center><math>\displaystyle (f-v_f, v)\,=\,0, \qquad\forall v\in V.  
<center><math>(f-v_f, v)\,=\,0, \qquad\forall v\in V.  
</math></center>
</math></center>


W naszym przypadku, ostatnia równość jest równoważna  
W naszym przypadku, ostatnia równość jest równoważna  


<center><math>\displaystyle \int_a^b(f-v_f)^{(r)}(x)s^{(r)}(x)\,dx\,=\,0,
<center><math>\int_a^b(f-v_f)^{(r)}(x)s^{(r)}(x)\,dx\,=\,0,
     \quad\forall s\in{\cal S}_r.  
     \quad\forall s\in{\cal S}_r.  
</math></center>
</math></center>


To zaś jest prawdą, gdy <math>\displaystyle v_f</math> interpoluje <math>\displaystyle f</math> w punktach <math>\displaystyle x_j</math>, czyli <math>\displaystyle v_f=s_f</math>.
To zaś jest prawdą, gdy <math>v_f</math> interpoluje <math>f</math> w punktach <math>x_j</math>, czyli <math>v_f=s_f</math>.


Dodajmy jeszcze, że nie zawsze interpolacja daje najlepszą  
Dodajmy jeszcze, że nie zawsze interpolacja daje najlepszą  
aproksymację w sensie klasycznym.  
aproksymację w sensie klasycznym.


==Literatura==
==Literatura==

Aktualna wersja na dzień 11:16, 12 wrz 2023


Funkcje sklejane (splajny)

<<< Powrót do strony głównej przedmiotu Metody numeryczne

Interpolacja wielomianami interpolacyjnymi, chociaż korzysta z funkcji gładkich i łatwo reprezentowalnych w komputerze, ma jednak również pewne wady. Zauważmy, że błąd interpolacji może być bardzo duży (zjawisko Rungego), a poza tym interpolacja jest nielokalna: nawet mała zmiana warości funkcji w pojedynczym węźle może powodować dużą zmianę zachowania całego wielomianu interpolacyjnego. Czasem więc lepiej jest zastosować innego rodzaju interpolację, np. posługując się funkcjami sklejanymi, które tylko lokalnie są wielomianami, sklejonymi w taki sposób, by globalnie zachować pewien stopień gładkości, tzn. różniczkowalność zadaną liczbę razy.

Tego typu podejście okazało się bardzo owocne m.in. w grafice komputerowej (np. dla wizualizacji scenerii w grach komputerowych), a także np. posłużyło jako narzędzie konstrukcji skalowalnych czcionek komputerowych w Postscripcie (precyzyjniej, korzysta się tam z tzw. krzywych Beziera --- pewnych krzywych sklejanych zadanych na płaszczyźnie). Z krzywych Beziera powszechnie korzysta się również w systemach CAD (Computer Aided Design).

Zamiast terminu funkcje sklejane używa się też często terminów splajny (spline), albo funkcje gięte. Nazwy te biorą się stąd, że zadanie interpolacji naturalnym splajnem kubicznym można interpretować jako model matematyczny aparatu służącego do wytwarzania mebli giętych.

Funkcje sklejane

W ogólności przez funkcję sklejaną rozumie się każdą funkcję przedziałami wielomianową. Nas będą jednak interesować szczególne funkcje tego typu i dlatego termin funkcje sklejane zarezerwujemy dla funkcji przedziałami wielomianowych i posiadających dodatkowe własności, które teraz określimy.

Niech dany będzie przedział skończony [a,b] i węzły

a=x0<x1<<xn=b,

przy czym n1.

Definicja

Funkcję s:RR nazywamy funkcją sklejaną rzędu r (r1) odpowiadającą węzłom xj, 0jn, jeśli spełnione są następujące dwa warunki:

(i)
s jest wielomianem stopnia co najwyżej 2r1 na każdym

z przedziałów [xj1,xj], tzn. s|[xj1,xj]Π2r1, 1jn,

(ii)
s jest (2r2)-krotnie różniczkowalna w sposób

ciągły na całej prostej, tzn. sC(2r2)(R).

Jeśli ponadto

(iii)
s jest wielomianem stopnia co najwyżej r1 poza

(a,b), tzn. s|(,a],s|[b,+)Πr1,

to s jest naturalną funkcją sklejaną.

Klasę naturalnych funkcji sklejanych rzędu r opartych na węzłach xj będziemy oznaczać przez 𝒮r(x0,,xn), albo po prostu 𝒮r, jeśli węzły są ustalone.

Na przykład funkcją sklejaną rzędu pierwszego (r=1) jest funkcja ciągła i liniowa na poszczególnych przedziałach [xj1,xj]. Jest ona naturalna, gdy poza (a,b) jest funkcją stała. Tego typu funkcje nazywamy liniowymi funkcjami sklejanymi.

Najważniejszymi z praktycznego punktu widzenia są jednak funkcje sklejane rzędu drugiego odpowiadające r=2. Są to funkcje, które są na R dwa razy różniczkowalne w sposób ciągły, a na każdym z podprzedziałów są wielomianami stopnia co najwyżej trzeciego. W tym przypadku mówimy o kubicznych funkcjach sklejanych. Funkcja sklejana kubiczna s jest naturalna, gdy poza (a,b) jest wielomianem liniowym, a więc s(a)=s(b)=0.

Interpolacja i gładkość

Pokażemy najpierw ważny lemat, który okaże się kluczem do dowodu dalszych twierdzeń.

Niech Wr(a,b) będzie klasą funkcji f:[a,b]R takich, że f jest (r1) razy różniczkowalna na [a,b] w sposób ciągły oraz f(r)(x) istnieje prawie wszędzie na [a,b] i jest całkowalna z kwadratem, tzn.

Wr(a,b)={fC(r1)([a,b]):f(r)(x) istnieje p.w. na [a,b] oraz f(r)2(a,b)}.

Oczywiście każda funkcja sklejana rzędu r (niekoniecznie naturalna) należy do Wr(a,b).

Lemat

Niech fWr(a,b) będzie funkcją zerującą się w węzłach, tzn.

f(xj)=0,0jn

Wtedy dla dowolnej naturalnej funkcji sklejanej s𝒮r mamy

abf(r)(x)s(r)(x)dx=0.

Dowód

Dla r=1 funkcja s jest przedziałami stała. Oznaczając przez aj jej wartość na [xj1,xj] dostajemy

abf(x)s(x)dx=j=1ntj1tjf(x)ajdx=j=1naj(f(xj)f(xj1))=0,

ponieważ f zeruje się w tj.

Rozpatrzmy teraz przypadek r2. Ponieważ

(f(r1)s(r))=f(r)s(r)+f(r1)s(r+1),

to

abf(r)(x)s(r)(x)dx=f(r1)(x)s(r)(x)|ababf(r1)(x)s(r+1)(x)dx

Wobec tego, że s jest poza przedziałem (a,b) wielomianem stopnia co najwyżej r1 oraz s(r) jest ciągła na R, mamy s(r)(a)=0=s(r)(b), a stąd

f(r1)(x)s(r)(x)|ab=0.

Postępując podobnie, tzn. całkując przez części r1 razy, otrzymujemy w końcu

abf(r)(x)s(r)(x)dx=(1)r1abf(x)s(2r1)(x)dx

Funkcja s(2r1) jest przedziałami stała, a więc możemy teraz zastosować ten sam argument jak dla r=1, aby pokazać,

że ostatnia całka jest równa zeru.

Funkcje sklejane chcielibyśmy zastosować do interpolacji funkcji. Ważne jest więc, aby odpowiednie zadanie interpolacyjne miało jednoznaczne rozwiązanie.

Twierdzenie O istnieniu i jednoznaczności naturalnego splajnu interpolacyjnego

Jeśli n+1r, to dla dowolnej funkcji f:[a,b]R istnieje dokładnie jedna naturalna funkcja sklejana sf𝒮r interpolująca f w węzłach xj, tzn. taka, że

sf(xj)=f(xj),0jn

Dowód

Pokażemy najpierw, że jedyną naturalną funkcją sklejaną interpolującą dane zerowe jest funkcja zerowa. Rzeczywiście, jeśli s(xj)=0 dla 0jn, to podstawiając w poprzednim lemacie f=s, otrzymujemy

ab(s(r)(x))2dx=0

Stąd s(r) jest funkcją zerową, a więc s jest wielomianem stopnia co najwyżej r1 zerującym się w co najmniej n+1 punktach xj. Wobec tego, że n+1>r1, otrzymujemy s0.

Zauważmy teraz, że problem znalezienia naturalnej funkcji sklejanej s interpolującej f można sprowadzić do rozwiązania układu równań liniowych z macierzą kwadratową. Na każdym przedziale [xi1,xi], 1in, jest ona postaci

s(x)=wi(x)=j=02r1ai,jxj,

dla pewnych współczynników ai,jR, a na (,a] i [b,) mamy odpowiednio

s(x)=w0(x)=j=0r1a0,jxj

i

s(x)=wn+1(x)=j=0r1an+1,jxj.

Aby wyznaczyć s, musimy więc znaleźć ogółem 2r(n+1) współczynników ai,j, przy czym są one związane (2r1)(n+1) warunkami jednorodnymi wynikającymi z gładkości,

wi(k)(xi)=wi+1(k)(xi)

dla 0in i 0k2r2, oraz n+1 niejednorodnymi warunkami interpolacyjnymi,

wi(xi)=f(xi)

dla 0in. Otrzymujemy więc układ 2r(n+1) równań liniowych ze względu na 2r(n+1) niewiadomych ai,j.

Naturalna funkcja sklejana interpolująca f jest wyznaczona jednoznacznie wtedy i tylko wtedy, gdy układ ten ma jednoznaczne rozwiązanie. To zaś zachodzi, gdy zero jest jedynym rozwiązaniem układu jednorodnego. Rzeczywiście, układ jednorodny odpowiada zerowym warunkom interpolacyjnym, przy których, jak pokazaliśmy wcześniej, zerowa funkcja sklejana (której odpowiada ai,j=0, i,j) jest jedynym rozwiązaniem zadania interpolacyjnego.

Naturalnych funkcji sklejanych możemy więc używać do interpolacji funkcji. Pokażemy teraz inną ich własność, która jest powodem dużego praktycznego zainteresowania funkcjami sklejanymi.

Twierdzenie O ekstremalnej własności splajnów naturalnych

Niech fWr(a,b) i niech sf𝒮r będzie naturalną funkcją sklejaną rzędu r interpolującą f w węzłach xj, 0jn. Wtedy

ab(f(r)(x))2dxab(sf(r)(x))2dx.

Dowód

Jeśli przedstawimy f w postaci f=sf+(fsf), to

ab(f(r)(x))2dx=ab(sf(r)(x))2dx+ab((fsf)(r)(x))2dx+2absf(r)(x)(fsf)(r)(x)dx.

Funkcja fsf jest w klasie Wr(a,b) i zeruje się w węzłach xj, 0jn. Z lematu wynika więc, że

absf(r)(x)(fsf)(r)(x)dx=0, a stąd wynika teza.

Wartość całki ab(f(r)(x))2dx może być w ogólności uważana za miarę gładkości funkcji. Dowiedzioną nierówność możemy więc zinterpretować w następujący sposób. Naturalna funkcja sklejana jest w klasie Wr(a,b) najgładszą funkcją spełniającą dane warunki interpolacyjne w wybranych węzłach xj.

Jak już wspomnieliśmy, najczęściej używanymi są kubiczne funkcje sklejane. Dlatego rozpatrzymy je oddzielnie.

Kubiczne funkcje sklejane

Jeśli zdecydowaliśmy się na użycie kubicznych funkcji sklejanych, powstaje problem wyznaczenia sf𝒮2 interpolującej daną funkcję f, tzn. takiej, że sf(xi)=f(xi) dla 0in. W tym celu, na każdym przedziale [xi,xi+1] przedstawimy sf w postaci jej rozwinięcia w szereg Taylora w punkcie xi,

sf(x)=wi(x)=ai+bi(xxi)+ci(xxi)22+di(xxi)36,

i podamy algorytm obliczania ai,bi,ci,di dla 0in1.

Warunki brzegowe i warunki ciągłości dla sf dają nam w0(x0)=0=wn1(xn) oraz wi(xi+1)=wi+1(xi+1), czyli

c0=0,ci+dihi=ci+1,0in2,cn1+dn1hn1=0,

gdzie hi=xi+1xi. Stąd, przyjmując dodatkowo cn=0, otrzymujemy

di=ci+1cihi,1in1

Z warunków ciągłości dla sf dostajemy z kolei

bi+cihi+dihi22=bi+1,0in2,

oraz

bi+1=bi+hici+1+ci2,0in2.

Warunki ciągłości sf dają w końcu

ai+bihi+cihi22+dihi36=ai+1,0in2.

Powyższe równania definiują nam na odcinku [a,b] naturalną kubiczną funkcję sklejaną. Ponieważ poszukiwana funkcja sklejana sf ma interpolować f, mamy dodatkowych n+1 warunków interpolacyjnych wi(xi)=f(xi), 0in1, oraz wn1(xn)=f(xn), z których

ai=f(xi),0in1

Teraz możemy warunki ciągłości przepisać jako

f(xi+1)=f(xi)+bihi+cihi2+dihi36,

przy czym wzór ten zachodzi również dla i=n1. Po wyrugowaniu bi i podstawieniu di, mamy

bi=f(xi,xi+1)+hici+1+2ci6,0in1,

gdzie f(xi,xi+1) jest odpowiednią różnicą dzieloną. Możemy teraz powyższe wyrażenie na bi podstawić, aby otrzymać

cihi6+ci+1hi+hi+13+ci+1hi+16=f(xi+1,xi+2)f(xi,xi+1).

Wprowadzając oznaczenie

ci*=ci6,

możemy to równanie przepisać jako

hihi+hi+1ci*+2ci+1*+hi+1hi+hi+1ci+2*=f(xi,xi+1,xi+2),

0in2, albo w postaci macierzowej

(2w1u22w2u32w3un22wn2un12)(c1*c2*c3*cn2*cn1*)=(v1v2v3vn2vn1),

gdzie

ui=hi1hi1+hi,wi=hihi1+hi,vi=f(xi1,xi,xi+1).

Ostatecznie, aby znaleźć współczynniki ai,bi,ci,di należy najpierw rozwiązać układ równań liniowych, a potem zastosować wzory definiujące pozostałe współczynniki.

Zauważmy, że macierz układu równań liniowych jest trójdiagonalna i ma dominującą przekątną. Układ można więc rozwiązać kosztem proporcjonalnym do wymiaru n używając algorytmu przeganiania. Koszt znalezienia wszystkich współczynników kubicznej funkcji sklejanej interpolującej f jest więc też proporcjonalny do n.

MATLAB i Octave mają wbudowaną funkcję wyznaczającą naturalny kubiczny splajn interpolujący zadane wartości:

s = spline(x,y);

Aby wyznaczyć wartości takiego splajnu w zadanych punktach X, także musimy użyć specjalnej funkcji,

Y = ppval(s,X);

Na końcu oszacujemy jeszcze błąd interpolacji naturalnymi kubicznymi funkcjami sklejanymi na przedziale [a,b]. Będziemy zakładać, że f jest dwa razy różniczkowalna w sposób ciągły.

Twierdzenie O błędzie interpolacji splajnem kubicznym

Jeśli fFM1([a,b]) to

fsfC([a,b])5Mmax1in(xixi1)2

W szczególności, dla podziału równomiernego xi=a+iban, 0in, mamy

fsfC([a,b])5M(ban)2.

Dowód

Wykorzystamy obliczoną wcześniej postać interpolującej funkcji sklejanej sf. Dla x[xi,xi+1] mamy

wi(x)=f(xi)+(f(xi+1)f(xi)hihi(ci+1*+2ci*))(xxi)+3ci*(xxi)2+ci+1*ci*hi(xxi)3.

Z rozwinięcia f w szereg Taylora w punkcie xi dostajemy f(x)=f(xi)+f(xi)(xxi)+f(ξ1)(xxi)2/2 oraz (f(xi+1)f(xi))/hi=f(xi)+hif(ξ2)/2. Stąd

f(x)sf(x)=f(x)wi(x)=f(ξ1)2(xxi)2(f(ξ2)2(ci+1*+2ci*))hi(xxi)3ci*(xxi)2ci+1*ci*hi(xxi)3,

oraz

|f(x)sf(x)|(M+2|ci+1*|+6|ci*|)hi2=(M+8max1in1|ci*|)hi2.

Niech teraz max1in1|ci*|=|cs*|. Z postaci układu otrzymujemy

|cs*|=2|cs*||cs*|(us+ws)|uscs1*+2cs*+wscs+1|=|f(xs1,xs,xs+1)||f(ξ3)2|12M,

a stąd

|f(x)sf(x)|5Mhi2,

co kończy dowód.

Przykład

Porównanie interpolacji splajnowej i Lagrange'a.

Interpolacja splajnowa wydaje się lepiej spełniać zadanie odtworzenia kształtu funkcji

Jak widać, w przeciwieństwie do wielomianu interpolacyjnego, splajn interpolacyjny praktycznie pokrywa się z wykresem funkcji, tutaj: f(x)=11+x2.

Uwaga

Niech

WMr(a,b)={fWr(a,b):ab(f(r)(x))2dxM}

Ustalmy węzły a=x0<<xn=b. Dla fWMr(a,b), niech sf będzie naturalną funkcją sklejaną interpolującą f w xj, 0jn, a af dowolną inną aproksymacją korzystającą jedynie z informacji o wartościach f w tych węzłach, tzn.

af=ϕ(f(x0),,f(xn))

Załóżmy, że błąd aproksymacji mierzymy nie w normie Czebyszewa, ale w normie średniokwadratowej zdefiniowanej jako

g2(a,b)=ab(g(x))2dx.

Wtedy

supfWMr(a,b)fsf2(a,b)supfWMr(a,b)faf2(a,b).

Aproksymacja naturalnymi funkcjami sklejanymi jest więc optymalna w klasie WMr(a,b).

Można również pokazać, że interpolacja sf* naturalnymi funkcjami sklejanymi na węzłach równoodległych xj=a+(ba)j/n, 0jn, jest optymalna co do rzędu w klasie WMr(a,b), wśród wszystkich aproksymacji korzystających jedynie z informacji o wartościach funkcji w n+1 dowolnych punktach, oraz

maxfWMr(a,b)fsf*2(a,b)nr.

Uwaga

Tak jak wielomiany, naturalne funkcje sklejane interpolujące dane funkcje można reprezentować przez ich współczynniki w różnych bazach. Do tego celu można na przykład użyć bazy kanonicznej Kj, 0jn zdefiniowanej równościami

Kj(xi)={0ij,1i=j,

przy której sf(x)=j=0nf(xj)Kj(x). Baza kanoniczna jest jednak niewygodna w użyciu, bo funkcje Kj w ogólności nie zerują się na żadnym podprzedziale, a tym samym manipulowanie nimi jest utrudnione.

Częściej używa się bazy B-sklejanej. Można ją zdefiniować dla splajnów dowolnego rzędu za pomocą wzoru rekurencyjnego (przyjmując, że dla dowolnego i, xi<xi+1):

Bi0(x)={1, jeśli xix<xi+1,0, w przeciwnym przypadku;
Bir(x)=xxixi+rxiBir1(x)+xi+r+1xxi+r+1xi+1Bi+1r1(x)

W przypadku naturalnych splajnów kubicznych, r=2, baza B-sklejana jest jawnie zdefiniowana przez następujące warunki:

Bj(xj)=1, dla 0jn,Bj(x)=0, dla xxj2,j2, oraz dla xxj+2,jn2.

Dla B0 i B1 dodatkowo żądamy, aby

B0(x0)=0=B1(x0),B1(x0)=0,

a dla Bn1 i Bn podobnie

Bn1(xn)=0=Bn(xn),Bn1(xn1)=0

Wtedy Bj nie zeruje się tylko na przedziale (xj2,xj+2). Wyznaczenie współczynników rozwinięcia w bazie {Bi}i=0n funkcji sklejanej interpolującej f wymaga rozwiązania układu liniowego z macierzą trójdiagonalną {Bj(xi)}i,j=0n, a więc koszt obliczenia tych współczynników jest proporcjonalny do n.

Uwaga

Oprócz naturalnych funkcji sklejanych często rozpatruje się też okresowe funkcje sklejane. Są to funkcje s~:RR spełniające warunki (i), (ii) \link{splinedef}{definicji funkcji sklejanej}, oraz warunek:

(iii)'
s~(i) jest dla 0ir1

funkcją okresową o okresie (ba), tzn. s~(i)(x)=s~(i)(x+(ba)), x.

Klasę okresowych funkcji sklejanych rzędu r oznaczymy przez 𝒮~r. Funkcje te mają podobne własności jak naturalne funkcje sklejane. Dokładniej, niech

W~r(a,b)={fWr(a,b):f(i)(a)=f(i)(b),0ir1},

tzn. W~r(a,b) jest klasą funkcji z Wr(a,b), które można przedłużyć do funkcji, krórych wszystkie pochodne do rzędu r1 włącznie są (ba)-okresowe na R. Wtedy dla dowolnej funkcji fW~r(a,b) zerującej się w węzłach xj, oraz dla dowolnej s~𝒮~r mamy

abf(r)(x)s~(r)(x)dx=0.

Wynika z niego jednoznaczność rozwiązania zadania interpolacyjnego dla okresowych funkcji f (tzn. takich, że f(a)=f(b)), jak również odpowiednia własność minimalizacyjna okresowych funkcji sklejanych. Dokładniej, jeśli fW~r(a,b) oraz s~f𝒮~r interpoluje f w węzłach xj, 0jn, to

ab(f(r)(x))2dxab(s~f(r)(x))2dx.

Dygresja o najlepszej aproksymacji

Klasyczne zadanie aproksymacyjne w przestrzeniach funkcji definiuje się w następujący sposób.

Niech F będzie pewną przestrzenią liniową funkcji f:[a,b]R, w której określona została norma . Niech VnF będzie podprzestrzenią w F wymiaru n. Dla danej fF, należy znaleźć funkcję vfF taką, że

fvf=minvVnfv.

Okazuje się, że tak postawione zadanie ma rozwiązanie vf, choć nie zawsze jest ono wyznaczone jednoznacznie.

Jako przykład, rozpatrzmy F=Wr(a,b). Utożsamiając funkcje f1,f2Wr(a,b) takie, że f1(x)f2(x)Πr1, zdefiniujemy w Wr(a,b) normę

f=ab(f(r)(x))2dx.

Dla ustalonych węzłów a=x0<<xn=b, niech

Vn+1=𝒮r

będzie podprzestrzenią w Wr(a,b) naturalnych funkcji sklejanych rzędu r opartych węzłach xj, 0jn. Oczywiście dim𝒮r=n+1, co wynika z jednoznaczności rozwiązania w 𝒮r zadania interpolacji. Okazuje się, że wtedy optymalną dla fWr(a,b) jest naturalna funkcja sklejana sf interpolująca f w węzłach xj, tzn.

fsf=mins𝒮rfs.

Rzeczywiście, ponieważ norma w przestrzeni Wr(a,b) generowana jest przez iloczyn skalarny

(f1,f2)=abf1(r)(x)f2(r)(x)dx,

jest to przestrzeń unitarna. Znane twierdzenie mówi, że w przestrzeni unitarnej najbliższą danej f funkcją w dowolnej domkniętej podprzestrzeni V jest rzut prostopadły f na V, albo równoważnie, taka funkcja vfVn+1, że iloczyn skalarny

(fvf,v)=0,vV.

W naszym przypadku, ostatnia równość jest równoważna

ab(fvf)(r)(x)s(r)(x)dx=0,s𝒮r.

To zaś jest prawdą, gdy vf interpoluje f w punktach xj, czyli vf=sf.

Dodajmy jeszcze, że nie zawsze interpolacja daje najlepszą aproksymację w sensie klasycznym.

Literatura

W celu dogłębnego zapoznania się z omawianym na wykładzie materiałem, przeczytaj rozdział 6.4 w

  • D. Kincaid, W. Cheney Analiza numeryczna, Wydawnictwa Naukowo-Techniczne, Warszawa 2006, ISBN 83-204-3078-X.

Warto także zapoznać się (nieobowiązkowo) z rozdziałami 6.5 i 6.6 tamże.