Wstęp
Rozpatrzmy takie zadanie: Mamy zestaw par punktów
Co więcej bardzo często żądamy dodatkowo, żeby funkcja pozwalała na łatwe manipulacje (dodawanie, mnożenie funkcji, różniczkowanie), a wyliczanie jej wartości nie było zbyt kosztowne.
Czasami zadanie stawiane jest niej ambitnie — mamy zestaw
W przypadku, gdy
Wielomiany
Bardzo często jako funkcję
Do wyliczania wartości takiego wielomianu najlepiej stosować schemat Hornera.
Interpolacja Lagrange’a
Interpolacja Lagrange’a polega na znalezieniu dla danego zestawu danych
przy czym zakładamy, że gdy
Można pokazać, że tak postawione zadanie interpolacyjne ma jednoznaczne rozwiązanie, które można przedstawić w postaci:
gdzie funkcja pomocnicza
Można pokazać że jest to jednoznaczne rozwiązanie problemu interpolacji Lagrange’a.
Niestety, postać Lagrange’a wielomianu interpolacyjnego jest bardzo niewygodna do prowadzenia jakichkolwiek obliczeń. Zazwyczaj wylicza się współczynniki wielomianu klasycznego i używa ich w obliczeniach.
Aby wyliczyć współczynniki wielomianu należy rozwiązać układ
Z względu na specyficzną postać współczynników (
Jedna z nich, oparta na wyliczaniu ilorazów różnicowych opisana zostanie pokrótce niżej. Wspominam o niej z „konikarskiego obowiązku" — to właśnie do wyliczania wartości wielomianów interpolacyjnych Babbage budował swój pierwszy „komputer": Maszynę różnicową.
Wielomian interpolacyjny
Wielomiany
Współczynniki
Współczynniki
Można pokazać, że zachodzi następująca zależność rekurencyjna:
Wyliczenie współczynników
Powyższe obliczenia można wykonać bardzo łatwo korzystając z następującego algorytmu:
for (k = 1; k <= n, k++)
for (l = n; l >= k; l--)
f[l] = (f[l] - f[l - 1]) / (x[l] - x[l - 1]);
Ponieważ najwygodniejszą (i najefektywniejszą) metodą liczenia wartości wielomianów jest metoda Hornera — trzeba korzystając ze współczynników
a[n] = b[n];
for (i = n - 1; i~>= 0; i--)
{
xi = x[i];
a[i] = b[i];
for (k = i; k <= n - 1; k++)
a[k] = a[k] - xi * a[k + 1];
}
Naszkicowany powyżej algorytm jest praktycznie najefektywniejszym algorytmem interpolacji. Jedynie w przypadku interpolacji trygonometrycznej i użycia Szybkiej Transformaty Fouriera, dla dużych
Przydatność algorytmu interpolacji pokazuje przykładowy notatnik Mathematici, gdzie na podstawie siedemnastu wartości funkcji sinus, które każdy zna (powinien znać) budowany jest wielomian interpolacyjny. Dla dużych
Funkcje sklejane
Interpolacja za pomocą wielomianów stopnia
Funkcję rzeczywistą
w każdym przedziale
dla jest wielomianem stopnia nie wyższego niż , i jej pochodne rzędu są ciągłe na całej osi rzeczywistej .
Gdy
Funkcje sklejane to specjalna kategoria funkcji interpolacyjnych. Są one skonstruowane z „kawałków" (funkcja może być inna w każdym przedziale interpolacji), ale mają szereg zalet. Nadają się zwłaszcza, gdy trzeba na podstawie siatki (na przykłąd MES) utworzyć gładką powierzchnię.
Szczególnym przypadkiem są krzywe Beziera (Bezier curve).
Mathematica
Interpolacja wielomianowa
Do wyliczania wielomianów interpolacyjnych służy funkcja Interpolation. Można jeż użyć albo tak:
data = {1, 2, 3, 5, 8, 5};
f = Interpolation[data]
W tym przypadku zakłada się, że nasz zestaw danych to pary:
Rząd interpolacji wybierany jest automatycznie. Najlepiej gdyby rzad interpolacji był równy
Wynik interpolacji (w tym wypadku
f[2.5]
2.4375
Show[ListPlot[data], Plot[f[x], {x, 1, 6}]]

Gdy mamy zestaw danych pp
, który jest tablicą dwuwymiarową zawierającą współrzędne węzłów w postaci
pp = {{0, 1}, {1/10, 2}, {1/5, -3}, {3/10, 5}, {2/5, 8}, {1/2, 3}}
ff = Interpolation[pp, InterpolationOrder -> 1];
Show[Plot[ff[x], {x, 0, 0.5}], ListPlot[pp, PlotStyle -> Red]]

Przykładowy notatnik Mathematici pokazujący zastosowanie interpolacji.
Interpolacja funkcjami sklejanymi
Do interpolacji funkcjami sklejanymi służyć mogą funkcje Interpolate lub ListInterpolate, gdy podamy jako metodę interpolacji "Spline". (W zasadzie nie widzę między nimi różnicy).
Przykładowy notatnik do porównania interpolacji wielomianowej i splajnów.
Matlab
Zakładam, że wszyscy Państwo znakomicie znacie Matlaba. Więc opisy są minimalne. Sugerują zabawy z Mathematicą.
Interpolacja wielominowa
Funkcja interp1 może być użyta do prostych zadań interpolacji. Korzysta z metod: ’nearest’, ’linear’,‘spline’,‘pchip’, or ‘cubic’ i nie interpoluje w sposób opisany w części teoretycznej.
Użycie:
vq = interp1(x, v, xq, method)
gdzie x tablica współrzędnych x węzłów interpolacji, v — tablica współrzędnych y węzłów, xq tablica zawierająca wartości punktów, w których chcemy wyliczyć wartości interpolowanej funkcji. Zakłada się, że węzły interpolacji są zapisane w kolejności rosnącej.
Istnieje również możliwość interpolacji na podstawie danych, które nie są w żaden sposób uporządkowane: na przykład mamy zestaw punktów w przestrzeni trójwymiarowej i chcemy narysować poziomice. Używa się wówczas metod opisanych jako interpolating scattered data.
Zadania
Przygotować przykład pokazujący zachowanie zachowanie wielomianu interpolacyjnego pomiędzy węzłami interpolacji.
Użyć interpolacji wielomianowej i za pomocą funkcji sklejanych do przebiegu temperatury z czujnika podczerwonego (plik ma w nazwie
temperatura_ir
). W wyniku powinniśmy dostać dwa różne „przybliżenia" funkcji ale o tych samych wartościach w węzłach interpolacji. Należy policzyć pochodne obu funkcji interpolacyjnych. Wyniki porównać. Wyciągnąć wnioski. (Zamiast interpolacji wielomianowej — jeżeli trudno lub nie da się jej wyliczyć — można użyć jakiegoś innego sposobu interpolacji.)Hint: w przypadku Mathematici, aby uzyskać pochodną funkcji
wystarczy napisać .
Sprawozdanie
Standardowe.
Lektury uzupełniające
Nieco teorii, ale inaczej podanej znaleźć można na blogu Szymona Wąsowicza: