Laboratorium 4: Aproksymacja

Wstęp

Podstawowym problemem interpolacji jest to, że stara się przeprowadzić funkcję przez wszystkie dane, które posiadamy (węzły). Ma to sens tylko i wyłącznie wtedy, gdy dane są dokładne i niezaburzone. Gdy jest inaczej — powinniśmy myśleć o jakimś ich uśrednieniu.

Aproksymacja

Aproksymacja to taka metoda „przybliżania" danych, w której zadaną funkcję stara się tak poprowadzić, żeby była jak najbliżej posiadanych punktów.

Osobną kwestią jest ustalenie co to znaczy „jak najbliżej"? Jeżeli mamy zestaw danych pomiarowych (par) (xi,yi),;i=1,2,,N, szukamy takiej funkcji f(x) aby: Q=i=1N(f(xi)yi)2min!

Tak postawione zadanie jest bardzo trudne — minimalizacja polega na wybraniu funkcji takiej, żeby… Znacznie prościej jest rozwiązywać zadanie następujące. Niech f(x)=g(x,a) gdzie a jest wektorem parametrów a=(a1,a2,,aM),;MN Q=j=1N(g(xj,a)yi)2min! Teraz zadanie optymalizacji jest łatwiejsze — musimy wybrać wektor liczb. Kolejne uproszczenie polega na rozważaniu zadanie liniowego względem parametrów: g(x,a)=j=1Majφj(x), a zadanie optymalizacji wygląda tak: Q=i=1N(j=1Majφj(xi)yi)2min!

Jego rozwiązanie jest stosunkowo proste — wystarczy wyliczyć pochodne cząstkowe Qaj i rozwiązać układ równań: Qaj=0;j=1,2,,M

Zadanie dalej się upraszcza gdy przyjąć, że funkcja φj(x)=xj.

Aproksymacja a interpolacja

W przypadku zadania interpolacji żądamy, aby funkcja interpolująca przeszła przez wszystkie punkty (węzły interpolacyjne).

Poniżej przedstawiam zestaw punktów (pomiary temperatury termometrem IR).

Kilka punktów uzyskanych z pomiarów temperatury
Kilka punktów uzyskanych z pomiarów temperatury

Krzywe interpolacyjne mogą wyglądać tak jak na kolejnym rysunku. Czerwonymi kropkami zaznaczone są węzły interpolacji. Zwracam uwagę, że różnica między interpolacją Hermite’a a krzywymi sklejanymi nie jest specjalnie wielka. Niepokojąco natomiast wyglądają różnice pochodnych — pochodna interpolacji splajnami sześciennymi jest gładka.

Przykłady interpolacji: wielomian Newtona
Przykłady interpolacji: wielomian Newtona
Przykłady interpolacji: wielomian sklejany Hermita
Przykłady interpolacji: wielomian sklejany Hermita
Przykłady interpolacji: wielomian sklejany trzeciego stopnia
Przykłady interpolacji: wielomian sklejany trzeciego stopnia

Aproksymacja — Mathematica

Do realizacji aproksymacji wykorzystać można w Mathematici funkcję Fit. Jej wywołanie jest następujące:

Fit[data, funs, vars]

gdzie data to zestaw danych (par punktów), funs funkcja lub wektor funkcji którymi przybliżamy. Na przykład: {1,x,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12}, vars — zmienna lub zmienne niezależne.

Powyższy zestaw jednomianów w różnych potęgach można łatwo wygenerować automatycznie: funs=Table[xi,i,0,10] {1,x,x2,x3,x4,x5,x6,x7,x8,x9,x10}

i dalej: funkcja1=Fit[dane[[All,2]],funs,x] w wyniku dostajemy współczynniki wielomianu: 8.003515809018834`*-20x10+1.1265995371896338`*-16x96.645297813196042`*-14x8+2.1252203010076843`*-11x73.981375997713063`*-9x6+4.408253297181539`*-7x50.0000278354x4+0.00093783x30.0165472x2+0.22931x1.59072S Korzysta się z otrzymanej funkcji aproksymacyjnej dosyć łatwo, na przykład: Plot[funkcja1,x,0,288,PlotStyleBlue] albo ff1[x\_]=funkcja1; i Plot[ff1[x],{x,0,288}]Plot[ff1[x],{x,0,288}]

W przypadku bardziej skomplikowanych zadań wykorzystać można również funkcje:

  • FindFit (funkcja aproksymująca nie musi liniowo zależeć od parametrów),
  • LinearModelFit (tylko dla modeli liniowych) i chyba najogólniejszą:
  • NonlinearModelFit.

Na poniższej ilustracji przykład aproksymacji dobowych zmian temperatury z termometru IR wielomianami stopnia 12 (zielony) i 4 (niebieski)).

Aproksymacja danych wielomianami różnego stopnia: niebieski — 4, zielony — 12
Aproksymacja danych wielomianami różnego stopnia: niebieski — 4, zielony — 12

Jak widać — cały problem sprowadza się do wyboru odpowiedniej funkcji aproksymacyjnej.

Matlab

Możliwości matlaba w zakresie aproksymacji wydają się być mniejsze. Toolbox Curve Fitting zawiera funkcję o nazwie fit i wywołaniu:

fit(x,y,fitType)

x i y to dane wejściowe. jako fitType podać należy łańcuch znaków określający rodzaj aproksymacji. Możliwości opisuje dokumentacja. Są tam wielomiany do stopnia 9 i parę innych funkcji.

Najprostsze użycie (korzystające z dostarczonych z matlabem danych przykładowych) wyglądać może tak:

load census;
f=fit(cdate,pop,'poly2')

census to jeden ze standardowych, przykładowych danych (w tym wypadku statystycznych) MATLABa zawierających informacje dotyczące liczby ludności USA w latach 1790–1990.

f = 
     Linear model Poly2:
     f(x) = p1*x^2 + p2*x + p3
     Coefficients (with 95% confidence bounds):
       p1 =    0.006541  (0.006124, 0.006958)
       p2 =      -23.51  (-25.09, -21.93)
       p3 =   2.113e+04  (1.964e+04, 2.262e+04)

Funkcja f() to wielomian drugiego stopnia; funkcja podaje wartość współczynników oraz granice ich istotności.

plot(f,cdate,pop)

Aproksymacja a regresja

Wyobraźmy sobie, że mamy n pomiarów xi jakiegoś parametru i chcemy zaaproksymować je wartością stałą x¯. Chcielibyśmy, aby ta stała była jak najbliższa wszystkim pomiarom. Interesuje nas zatem taki problem: Q=i1n(xix¯)2min! czyli szukamy takiej wartości x¯, która minimalizuje Q. Policzmy więc pierwszą pochodną dQdx¯ (będziemy przyrównywać ją do zera):

dQdx¯=i=1n2(xix¯)=2i=1nxi2nx¯=0

zatem

x¯=1ni=1nxi.

Wzór ten przypomina nam znany ze statystyki wzór na średnią.

Nie od rzeczy będzie wspomnieć, że aproksymacja ma bardzo wiele wspólnego ze znaną ze statystyki regresją. W pewnym sensie jest to to samo (choć nie należy mówić tego głośno) — w przypadku regresji jest cała otoczka związana z probabilistyką (w szczególności zakłada się, że xi są to obserwacje pewnej zmiennej losowej X, a to bardzo silne założenie — mówi ono, o tym, że istnieje rozkład prawdopodobieństwa zmiennej losowej X). Można w takim przypadku pokazać, że wyliczona wartość x¯ ma pewne pożądane właściwości — wraz ze wzrostem n, x¯ zmierza do wartości średniej rozkładu (jest estymatorem wartości średniej) i, że jest to estymator nieobciążony.

W technice wykorzystuje się średnią do „polepszania" wyników pomiarów. Zakładamy, że wartość a mierzona jest z pewnym addytywnym błędem, czyli: xi=a+ζi; zaburzenia ζi są niezależnymi realizacjami obserwacji pewnej zmiennej losowej Z o średniej 0. Zatem wyliczając i=1nxi, po dokonaniu odpowiednio wielu pomiarów „odkryć" możemy prawdziwą wartość a.

Podobne interpretacje można zaprezentować również dla innych zadań, w których stosujemy aproksymację.

Zadanie do wykonania

Wybrać jakiś przebieg dobowy i przybliżyć go za pomocą jakiejś sprytnej funkcji (która dobrze będzie oddawała istotę zmienności przebiegu.

Uwagi:

  1. Dane otrzymane z pomiarów zawierają bardzo duże wartości współrzędnych x. Może to stanowić problem podczas aproksymacji. Stanowczo więc zalecam przesunięcie czasu do zera (to znaczy pierwszy pomiar dokonywany jest w chwili 0, a następne co 300 sekund). Można to osiągnąć tak:
    dane=Import[AVERAGE300.dat];
    xmin=[Min[dane[[All,1]]];
    dane[[All,1]]=dane[[All,1]]xmin
    Można też porównać otrzymane wyniki z wynikami aproksymacji tylko wartości y (x przyjmuje wartości 1,2,…):
    funkcja1=Fit[dane[[All,2]],funs,x]

  2. Jeżeli chodzi o wybór funkcji — sugeruję zacząć od wielomianów. Teoretycznie, im wyższy stopień wielomianu — tym przybliżenie lepsze. Tylko nie wiadomo czy sensowniejsze. Ambitni mogą wymyślić jakąś funkcję nieliniową lub złożyć z kawałków (patrz tutorial).

Poprzedni
Następny