Interpolacja funkcjami sklejanymi (dokument w formacie PDF)

Transkrypt

Interpolacja funkcjami sklejanymi (dokument w formacie PDF)
Interpolacja funkcjami sklejanymi
Kazimierz Jakubczyk
19 lutego 2008
Przykład Rungego
Jedyną możliwością uzyskania lepszego przybliżenia w interpolacji wielomianowej jest zwiększenie stopnia wielomianu interpolacyjnego, czyli liczby węzłów.
Nie jest to jednak możliwe, gdy funkcja interpolowana jest nieznana. Nawet gdy
funkcja interpolowana jest znana i bardzo regularna, ciąg wielomianów interpolacyjnych może nie być do niej zbieżny. Przykładem takiej funkcji jest
f (x) =
1
1 + x2
i ciąg wielomianów interpolacyjnych {Pn } opartych na węzłach równoodległych
z przedziału [−5, 5]:
xi = −5 + i
10
n
(i = 0, 1, . . . , n)
(Runge) [2]. Pomimo że f jest nieskończenie różniczkowalna, to ciąg {Pn (x)}
jest zbieżny do f (x) tylko dla |x| < 3, 63 . . . i rozbieżny dla |x| > 3, 63 . . .
Funkcje sklejane
Klasyczne funkcje sklejane wywodzą się z praktyki inżynierskiej. Przez wiele lat
do kreślenia elementów konstrukcyjnych w przemyśle okrętowym i samochodowym używano elastycznej listewki drewnianej nazywanej giętką (ang. spline).
Liniał taki, prowadzony przez zadane punkty za pomocą stosownych ciężarków,
ugina się wzdłuż grzywej „najgładszej”. Inna odmiana tej techniki rysowania
krzywych gładkich polega na użyciu tzw. krzywików.
Liniał używany przez kreślarza można traktować jak cienką belkę ulegającą
odkształceniu pod wpływem działania sił zewnętrznych w danych punktach.
Siły sprężyste belki równoważą siły zginające, w wyniku czego belka przyjmuje
kształt krzywej „najgładszej” — charakteryzującej się własnością minimalnej
krzywizny [1].
Pojęcie „gładkości” krzywej uściślimy dla krzywych o równaniu y = f (x),
gdzie f ∈ C 2 [a, b]. Krzywizna takiej krzywej w punkcie x wynosi
f 00 (x)
κ(x) = p
1 + f 0 (x)2
1
3
Niech będzie dany układ punktów x0 , x1 , . . . , xn dzielących przedział [a, b]
na n części, tzn.:
a = x0 < x 1 < . . . < xn = b
Niech również będą dane wartości y0 , y1 , . . . , yn w punktach tego podziału.
Funkcja (krzywa) f ∈ C 2 [a, b] interpolująca punkty (xi , yi ) (i = 0, 1, . . . , n)
jest „najgładsza” w tym sensie, że spośród wszystkich funkcji (krzywych) klasy C 2 [a, b] interpolujących te punkty daje najmniejszą wartość tzw. krzywizny
całkowitej [1]:
Z b
κ(x)2 dx
a
W praktyce trudno jest szukać rozwiązania zagadnienia interpolacji w postaci funkcji „najgładszej” z powodu skomplikowanego wyrażenia opisującego krzywiznę. Nietrudno zauważyć, że dla małych wartości |f 0 (x)| krzywizna w punkcie
x jest w przybliżeniu równa f 00 (x). Uproszczenie to dostarcza interesującego rozwiązania w postaci funkcji sklejanych trzeciego stopnia, które wystarcza w wielu
zastosowaniach, nawet gdy wartości |f 0 (x)| nie są małe. Kryterium minimalnej
krzywizny sprowadza się wówczas do minimalizacji całki [1, 2, 4]:
Z
b
f 00 (x)2 dx
a
Definicja 1. Funkcję rzeczywistą s ∈ C m−1 [a, b] nazywamy funkcją sklejaną
lub splajnem (ang. spline) stopnia m z węzłami
a = x0 < x 1 < . . . < xn = b
jeżeli w każdym z przedziałów [xi , xi+1 ] jest wielomianem stopnia co najwyżej m.
Funkcja sklejana stopnia 0 jest funkcją schodkową (przedziałami stałą),
a funkcja sklejana stopnia 1 jest łamaną. W praktyce najczęściej są używane
funkcje sklejane stopnia 3, nazywane też sześciennymi lub kubicznymi. W pewnych zadaniach stosuje się funkcje sklejane wyższych stopni, a także inne ich
odmiany, np. hiperboliczne funkcje sklejane i funkcje B-sklejane. Dla stopni nieparzystych m = 2k + 1 rozpatruje się często naturalne funkcje sklejane, które
poza przedziałem [a, b] są wielomianami stopnia co najwyżej k.
Obliczanie funkcji sklejanych
Szukamy takiej funkcji sklejanej s trzeciego stopnia, która w danych węzłach xi
ma dane wartości yi i która w każdym z przedziałów [xi , xi+1 ] jest wielomianem
stopnia nie wyższego niż 3. Niech
Mi = s00 (xi )
(i = 0, 1, . . . , n)
Ponieważ s jest w przedziale [xi , xi+1 ] wielomianem stopnia co najwyżej trzeciego, funkcja s00 jest tam liniowa [1]:
s00 (x) =
Mi+1 − Mi
(x − xi ) + Mi
xi+1 − xi
2
Całkując dwukrotnie obie strony tej równości, otrzymujemy najpierw
s0 (x) =
Mi+1 − Mi
(x − xi )2 + Mi (x − xi ) + αi
2(xi+1 − xi )
a potem
s(x) =
Mi+1 − Mi
Mi
(x − xi )3 +
(x − xi )2 + αi (x − xi ) + yi
6(xi+1 − xi )
2
Stała całkowania yi wynika z warunku interpolacji s(xi ) = yi . Z kolei, korzystając z powyższego równania i warunku s(xi+1 ) = yi+1 , otrzymujemy
yi+1 =
Mi
Mi+1 − Mi
(xi+1 − xi )3 +
(xi+1 − xi )2 + αi (xi+1 − xi ) + yi
6(xi+1 − xi )
2
a stąd
αi =
Mi+1 + 2Mi
yi+1 − yi
−
(xi+1 − xi )
xi+1 − xi
6
Funkcje s0 i s dają się więc opisać w przedziale [xi , xi+1 ] wzorami:
Mi+1 − Mi
yi+1 − yi
(x − xi )2 + Mi (x − xi ) +
+
2(xi+1 − xi )
xi+1 − xi
Mi+1 + 2Mi
−
(xi+1 − xi )
6
Mi+1 − Mi
Mi
s(x) =
(x − xi )3 +
(x − xi )2 +
6(xi+1 − xi )
2
Mi+1 + 2Mi
yi+1 − yi
−
(xi+1 − xi ) (x − xi ) + yi
+
xi+1 − xi
6
s0 (x) =
w których należy wyznaczyć wielkości Mi (i = 0, 1, . . . , n). Funkcja s0 jest ciągła.
Porównując zatem dwa wyrażenia reprezentujące wartość s0 (xi −) = s0 (xi +)
odpowiadające przejściu od przedziału [xi−1 , xi ] do [xi , xi+1 ], dostajemy
µi Mi−1 + 2Mi + λi Mi+1 = di
gdzie
(i = 1, 2, . . . , n − 1)
xi+1 − xi
, µi = 1 − λi
xi+1 − xi−1
6
yi+1 − yi
yi − yi−1
di =
−
xi+1 − xi−1 xi+1 − xi
xi − xi−1
λi =
Otrzymaliśmy układ n − 1 równań liniowych z niewiadomymi M0 , M1 , . . . , Mn .
Ponieważ niewiadomych jest n + 1, rozwiązanie tego układu wymaga określenia
dodatkowych warunków, które zapiszemy w postaci dwóch dodatkowych równań
liniowych — jednego na początku, a drugiego na końcu układu:
2M0 + M1 λ0 = d0
µn Mn−1 + 2Mn = dn
3
Wtedy pełny układ wygląda następująco:
 

 

2 λ0
0
M0
d0
  M1   d1 
 µ 1 2 λ1
 

 

  M2   d2 

µ2 2 λ2
 

 

 ×  ..  =  .. 

.. .. ..
  .   . 

.
.
.
 

 


µn−1 2 λn−1   Mn−1   dn−1 
0
µn 2
Mn
dn
Powróćmy do określenia współczynników dwóch dodatkowych równań. Najprościej przyjąć M0 = Mn = 0, tj.
λ0 = 0, d0 = 0
µn = 0, dn = 0
Daje to normalną funkcję sklejaną trzeciego stopnia, która na lewo i na prawo od
przedziału [a, b] jest wielomianem pierwszego stopnia. Odpowiada to liniałowi
elastycznemu, którego końce są swobodne.
Inny sensowny wybór współczynników dodatkowych równań odpowiada liniałowi o usztywnionych końcach, np. belce o końcach wmurowanych w rurach,
w których mogą się one przesuwać. Inaczej mówiąc, warunki dające naturalną
funkcję sklejaną zastępujemy warunkami brzegowymi postaci
s0 (x0+ ) = y00 ,
s0 (xn ) = yn0
gdzie y00 i yn0 są danymi nachyleniami końców liniału. Korzystając z równania
przedstawiającego postać funkcji s0 , łatwo uzyskać współczynniki obu równań:
6
y1 − y0
λ0 = 1, d0 =
− y00
x1 − x0 x1 − x0
6
yn −yn−1
µn = 1, dn =
yn0 −
xn −xn−1
xn −xn−1
Oczywiście, można określać warunki mieszane, przyjmując jeden koniec swobodny, a drugi usztywniony. Rozpatruje się również okresowe funkcje sklejane,
które w końcach przedziału [a, b] przyjmują takie same wartości wraz z pierwszymi pochodnymi.
Macierz układu równań wiążącego wielkości M0 , M1 , . . . , Mn jest trójdiagonalna, a ponieważ
µi + λi = 1 (i = 1, 2, . . . , n − 1)
oraz λ0 i µn są równe 0 lub 1, główna przekątna tej macierzy jest dominująca.
Dowodzi się, że macierz o tej własności jest nieosobliwa, układ ma więc dokładnie jedno rozwiązanie. Można go wyznaczyć, stosując uproszczony wariant
metody Gaussa. Mianowicie, eliminując jedynie elementy leżące tuż pod główną
przekątną, otrzymujemy
Mi = qi Mi+1 + ui
(i = 0, 1, . . . , n − 1)
Mn = un
4
gdzie
q0 = −
λ0
,
2
λi
,
µi qi−1 + 2
dn − µn un−1
un =
µn qn−1 + 2
qi = −
d0
2
di − µi ui−1
ui =
µi qi−1 + 2
u0 =
(i = 1, 2, . . . , n − 1)
Ostatnie równanie daje bezpośrednio wartość współczynnika Mn . Wartości pozostałych obliczamy w kolejności Mn−1 , Mn−2 , . . . , M0 . Algorytm wyznaczania
wartości M0 , M1 , . . . , Mn można zaprogramować następująco:
if lewy_koniec_swobodny then
begin
q[0] := 0;
u[0] := 0;
end else
begin
q[0] := -0.5;
u[0] := 3*((y[1]-y[0])/(x[1]-x[0])-yp0)/(x[1]-x[0]);
end;
for i := 1 to n-1 do
begin
lambda := (x[i+1]-x[i])/(x[i+1]-x[i-1]);
mi := 1-lambda;
d := 6*((y[i+1]-y[i])/(x[i+1]-x[i])(y[i]-y[i-1])/(x[i]-x[i-1]))/(x[i+1]-x[i-1]));
q[i] := -lambda/(mi*q[i-1]+2);
u[i] := (d-mi*u[i-1])/(mi*q[i-1]+2);
end;
if prawy_koniec_swobodny then M[n] := 0 else
begin
d := 6*(ypn-(y[n]-y[n-1])/(x[n]-x[n-1]))/(x[n]-x[n-1]);
M[n] := (d-u[n-1])/(q[n-1]+2);
end;
for i := n-1 downto 0 do
M[i] := q[i]*M[i+1]+u[i];
W algorytmie przyjęto, że dwie zmienne logiczne lewy koniec swobodny i prawy koniec swobodny zawierają informację o warunkach brzegowych: wartość true
oznacza, że stosowny koniec liniału elastycznego jest swobodny, a false, że jest
usztywniony. Ponadto zmienne yp0 i ypn mają — odpowiednio — wartości y00
i yn0 , gdy końce liniału są usztywnione.
Aby znaleźć wartość w = s(t) funkcji sklejanej s w punkcie t ∈ [a, b], trzeba najpierw ustalić, do którego z przedziałów [xi , xi+1 ] punkt t należy. W poniższym algorytmie przeglądanie to odbywa się od strony prawej do lewej. Po
znalezieniu odpowiedniego przedziału obliczana jest według schematu Hornera
wartość właściwego wielomianu trzeciego stopnia:
5
i := n;
repeat
i := i-1;
dt := t-x[i];
until (i = 0) or (dt >= 0);
dx := x[i+1]-x[i];
w := (((M[i+1]-M[i])/(6*dx)*dt+
M[i]/2)*dt+
((y[i+1]-y[i])/dx-(M[i+1]+2*M[i])/6*dx))*dt+
y[i];
Algorytm można łatwo rozbudować tak, by uwzględnione zostały również
przedziały (−∞, x0 ) i (xn , ∞). Należy wówczas przyjąć, że s jest w tych przedziałach wielomianem stopnia co najwyżej pierwszego, czyli że jest naturalną
funkcją sklejaną.
Jakość interpolacji
Istnienie i jednoznaczność funkcji sklejanej trzeciego stopnia interpolującej dane punkty wynika z faktu, że macierz rozpatrywanego wyżej układu równań
liniowych jest nieosobliwa. Interpolująca funkcja sklejana jest w pewnym sensie
najgładszą funkcją interpolującą [3].
Twierdzenie 1. Jeżeli f ∈ C 2 [a, b], a = x0 < x1 < . . . < xn = b i s jest
funkcją sklejaną trzeciego stopnia interpolującą f w węzłach xi (i = 0, 1, . . . , n),
to
Z
Z
b
b
2
[s00 (x)] dx ¬
a
2
[f 00 (x)] dx
a
Dowód. Niech q ≡ f − s. Mamy:
Z b
Z b
Z b
Z b
2
2
2
[f 00 (x)] dx =
[s00 (x)] dx +
[g 00 (x)] dx + 2 s00 (x) g 00 (x) dx
a
a
a
a
Wystarczy pokazać, że ostatnia całka po prawej stronie znika. Całkując przez
części, otrzymujemy
Z b
n Z xi
X
00
00
s (x)g (x) dx =
s00 (x)g 00 (x) dx =
a
=
i=1 xi−1
"
n
X
00
#
Z xi
000
0
s (xi )g (xi ) −s (xi−1 )g (xi−1 ) − s (x)g (x) dx =
0
00
0
xi−1
i=1
= s00 (b)g 0 (b) − s00 (a)g 0 (a) −
n
X
i=1
= s00 (b)g 0 (b) − s00 (a)g 0 (a) −
n
X
Z
ci
xi
g 0 (x) dx =
xi−1
ci [g(xi ) − g(xi−1 )]
i=1
gdzie ci są stałymi takimi, że ci = s000 (x) dla x ∈ [xi−1 , xi ] (funkcja s000 jest
przedziałami stała). Z definicji funkcji g wynika, że g(xi ) = 0. Zatem
Z b
s00 (x)g 00 (x) dx = s00 (b)g 0 (b) − s00 (a)g 0 (a)
a
6
Wyrażenie po prawej stronie równości jest równe zero, gdy warunki brzegowe
określają naturalną funkcję sklejaną (swobodne końce):
s00 (a) = s00 (b) = 0
Jeżeli warunki określające naturalną funkcję sklejaną zastąpimy warunkami
alternatywnymi (usztywnione końce):
s0 (a) = f 0 (a) = y00 ,
s0 (b) = f 0 (b) = yn0
to wyrażenie to będzie również miało wartość zero:
s00 (b)g 0 (b) − s00 (a)g 0 (a) = s00 (b) [f 0 (b) − s0 (b)] − s00 (a) [f 0 (a) − s0 (a)] = 0
Wbrew zachowaniu się wielomianów interpolacyjnych (por. przykład Rungego [2]) funkcje sklejane są zbieżne do funkcji, którą interpolują, jeżeli tylko
wybieramy coraz drobniejsze podziały rozpatrywanego przedziału [a, b]. Wynika to z następującego twierdzenia dotyczącego oszacowania błędu interpolacji
funkcjami sklejanymi trzeciego stopnia [2] (bez dowodu).
Twierdzenie 2. Jeżeli f ∈ C 2 [a, b], a = x0 < x1 < . . . < xn = b i s jest
funkcją sklejaną trzeciego stopnia interpolującą f w węzłach xi (i = 0, 1, . . . , n),
to dla każdego x ∈ [a, b] zachodzi nierówność
|f (x) − s(x)| ¬ 5M max (xi − xi−1 )2
1¬i¬n
gdzie
M = max |f 00 (ξ)|
a¬ξ¬b
Literatura
[1] Ahlberg J.H., Nilson E.N., Walsh J.L.: The Theory of Splines and Their
Applications, Academic Press, New York and London 1967.
[2] Jankowscy J. i M.: Przegląd metod i algorytmów numerycznych, część 1,
WNT, Warszawa 1981.
[3] Kincaid D., Cheney W.: Analiza numeryczna, WNT, Warszawa 2006.
[4] Stoer J.: Wstęp do metod numerycznych, tom 1, PWN, Warszawa 1979.
7

Podobne dokumenty