czwartek, 19 listopada 2015

Interpolacja liniowa

Interpolacja liniowa – szczególny przypadek aproksymacji za pomocą funkcji liniowej.

Aproksymacja (łac. approximare – przybliżać) – proces określania rozwiązań przybliżonych na podstawie rozwiązań znanych, które są bliskie rozwiązaniom dokładnym w ściśle sprecyzowanym sensie. Zazwyczaj aproksymuje się byty (np. funkcje) skomplikowane bytami prostszymi. Często stosowana w przypadku szukania rozwiązań dla danych uzyskanych metodami empirycznymi, które mogą być obarczone błędami.

Jeśli x określa wartość z przedziału x0 < x < x1, a y0 = f(x0) i y1 = f(x1) tablicę wartości danej funkcji, oraz h = x1 - x0 odstęp pomiędzy argumentami, wówczas liniową interpolację wartości L(x) funkcji f otrzymuje się jako:



Interpolacja liniowa



Interpolacja wielomianowa, nazywana też interpolacją Lagrange'a, od nazwiska pioniera badań nad interpolacją Josepha Lagrange'a, lub po prostu interpolacją jest metodą numeryczną przybliżania funkcji tzw. wielomianem Lagrange'a stopnia n przyjmującym w n+1 punktach, zwanych węzłami interpolacji, wartości takie same jak przybliżana funkcja.

Interpolacja jest często stosowana w naukach doświadczalnych, gdzie dysponuje się zazwyczaj skończoną liczbą danych do określenia zależności między wielkościami.

Zgodnie z twierdzeniem Weierstrassa dowolną funkcję y=f(x), ciągłą na przedziale domkniętym, można dowolnie przybliżyć za pomocą wielomianu odpowiednio wysokiego stopnia.

Metoda interpolacji polega na:
  1. wybraniu n+1 punktów x0,x1,...,xn należących do dziedziny f, dla których znane są wartości


    y_0=f(x_0),y_1=f(x_1),\cdots ,y_n=f(x_n)
  2. znalezieniu wielomianu W(x) stopnia co najwyżej n takiego, że

    W(x_0)=y_0,W(x_1)=y_1,\cdots W(x_n)=y_n

Interpretacja geometryczna – dla danych n+1 punktów na wykresie szuka się wielomianu stopnia co najwyżej n, którego wykres przechodzi przez dane punkty.

Znajdowanie odpowiedniego wielomianu

Wielomian przyjmujący zadane wartości w konkretnych punktach można zbudować w ten sposób:

  1. Dla pierwszego węzła o wartości f(x0) znajduje się wielomian, który w tym punkcie przyjmuje wartość f(x0), a w pozostałych węzłach x1,x2,...,xn wartość zero.
  2. Dla kolejnego węzła znajduje się podobny wielomian, który w drugim węźle przyjmuje wartość f(x1), a w pozostałych węzłach x0,x2,...,xn wartość zero.
  3. Dodaje się wartość ostatnio obliczonego wielomianu do wartości poprzedniego.
  4. Dla każdego z pozostałych węzłów znajduje się podobny wielomian, za każdym razem dodając go do wielomianu wynikowego.
  5. Wielomian będący sumą wielomianów obliczonych dla poszczególnych węzłów jest wielomianem interpolującym.
Dowód ostatniego punktu i dokładny sposób tworzenia poszczególnych wielomianów opisany jest poniżej w dowodzie istnienia wielomianu interpolującego będącego podstawą algorytmu odnajdowania tego wielomianu.
Wielomian Lagrange'a
Postać Lagrange'a wielomianu to jedna z metod przedstawiania wielomianu, wykorzystywana często w zagadnieniach interpolacji. Dla wielomianu stopnia n wybiera się n+1 punktów – x0,x1,...,xn i wielomian ma postać:


Ponieważ
  \prod_{j=0 \and j\ne i}^n \frac{x-x_j}{x_i-x_j}   jest równy 1 dla x równego xi (licznik i mianownik są równe), 0 zaś dla wszystkich innych xj (licznik jest równy zero), można łatwo za pomocą postaci Lagrange'a interpolować dowolną funkcję:


L_f(x) = \sum_{i=0}^n f(x_i) \prod_{j=0 \and j\ne i}^n \frac{x-x_j}{x_i-x_j}



Wielomian ten będzie się zgadzał z funkcją f we wszystkich punktach xi.

Szybka transformacja Fouriera

Szybka transformacja Fouriera (ang. fast Fourier transform, FFT) – algorytm liczenia dyskretnej transformaty Fouriera oraz transformaty do niej odwrotnej.
Czasem używana jest też forma szybka transformata Fouriera w odniesieniu do tej metody. Ściśle jednak transformacja jest przekształceniem, a transformata wynikiem tego przekształcenia.
Niech x0, ...., xN-1 będą liczbami zespolonymi, wtedy dyskretna transformata Fouriera jest określona wzorem:

X_k =  \sum_{n=0}^{N-1} x_n e^{-{2\pi i \over N} nk }
\qquad
k = 0,\dots,N-1.

Obliczanie tych sum za pomocą powyższego wzoru zajęłoby O(N2) operacji.
Algorytmy (jak algorytm Cooleya-Tukeya) obliczające szybką transformację Fouriera bazują na metodzie dziel i zwyciężaj, rekurencyjnie dzieląc transformatę wielkości N = N1N2 na transformaty wielkości N1 i N2 z wykorzystaniem O(N) operacji mnożenia.
Najpopularniejszą wersją FFT jest FFT o podstawie 2. Jest to bardzo efektywna operacja, jednak wektor próbek wejściowych (spróbkowany sygnał) musi mieć długość N=2^k, gdzie k to pewna liczba naturalna. Wynik otrzymuje się na drodze schematycznych przekształceń, opartych o tak zwane struktury motylkowe.
Złożoność obliczeniowa Szybkiej transformacji Fouriera wynosi O(N \log_2 N), zamiast O(N^2) algorytmu wynikającego wprost ze wzoru określającego dyskretną transformatę Fouriera. Dzięki istnieniu takiego algorytmu praktycznie możliwe stało się cyfrowe przetwarzanie sygnałów (DSP), a także zastosowanie dyskretnych transformat kosinusowych (DCT) (JPEG, MP3 itd.) do kompresji.

czwartek, 15 października 2015

Interpolacja

INTERPOLACJA

 Interpolacja – metoda numeryczna polegająca na wyznaczaniu w danym przedziale tzw.funkcji interpolacyjnej, która przyjmuje w nim z góry zadane wartości w ustalonych punktach, nazywanych węzłami.
Stosowana jest ona często w naukach doświadczalnych, gdzie dysponuje się zazwyczaj skończoną liczbą danych do określenia zależności między wielkościami oraz w celu uproszczenia skomplikowanych funkcji, np. podczas całkowania numerycznego.
 Interpolacja jest szczególnym przypadkiem metod numerycznych typu aproksymacja.

Interpolacja dwuliniowa 
jest rozszerzeniem interpolacji liniowej. Metoda ta pozwala na interpolację funkcji dwóch zmiennych. Intuicyjnie interpolacja dwuliniowa jest złożeniem dwóch interpolacji liniowych.
W celu przeprowadzenia interpolacji dwuliniowej przeprowadza się dwie interpolacje liniowe dla jednego kierunku (np. wzdłuż osi OX w układzie kartezjańskim), a następnie dla tak uzyskanych wartości przeprowadza się interpolację liniową dla drugiego kierunku (osi OY).

Metody Numeryczne

 Metody rozwiązywania problemów matematycznych za pomocą operacji na liczbach.
Otrzymywane tą drogą wyniki są na ogół przybliżone, jednak dokładność obliczeń może być z góry
określona i dobiera się ją zależnie od potrzeb.
Metody numeryczne wykorzystywane są wówczas gdy badany problem nie ma w ogóle rozwiązania
analitycznego (danego wzorami), lub korzystanie z takich rozwiązań jest uciążliwe ze względu na
ich złożoność.


      Metody numeryczne  są to sposoby rozwiązywania złożonych problemów matematycznych za pomocą narzędzi obliczeniowych udostępnianych przez popularne języki programowania.

      Metody numeryczne  są jedną z tych dziedzin matematyki stosowanej, których zastosowanie w praktyce jest powszechne. Wykorzystywane są wówczas, gdy badany problem nie ma w ogóle rozwiązania analitycznego (danego wzorami), lub korzystanie z takich rozwiązań jest uciążliwe ze względu na ich złożoność lub z innych powodów (np. stosowanie eliminacji Gaussa zamiast wyliczania rozwiązań układu równań metodą wyznaczników jest stosowana dlatego, że jest lepiej uwarunkowana numerycznie, a nie dlatego, że brak jest wzoru). Otrzymywane tą drogą wyniki są na ogół przybliżone, jednak dokładność obliczeń może być z góry określona i dobiera się ją zależnie od potrzeb.

      Inaczej mówiąc: metody numeryczne polegają na uzyskiwaniu wyniku poprzez sekwencję kolejnych przybliżeń. W efekcie otrzymany wynik będzie cechował się prawie zawsze pewnym błędem, chociaż ten błąd może być dowolnie mały.

      Metody numeryczne znalazły zastosowanie wszędzie tam, gdzie dojście do wyniku innymi sposobami jest niemożliwe lub bardzo trudne.
Takim przykładem z życia szkolnego może być np. obliczenie powierzchni jakiejś nieregularnej figury lub pola pod krzywą.

      Z metodami numerycznymi związane są takie pojęcia jak: konwergencja i dywergencja oraz dokładność.

      Konwergencja określa zdolność danej metody numerycznej do "zmierzania" w kierunku wyniku. Użytkownik jest zainteresowany, aby zastosowana metoda cechowała się maksymalną konwergencją. Niestety czasami dla pewnych specyficznych danych zastosowana metoda numeryczna może zachowywać się co najmniej dziwnie - zamiast prowadzić do wyniku, daje rezultaty coraz bardziej od wyniku odległe. Tę niepożądaną cechę nazywa się dywergencją. Czasem dywergencja dla pewnego małego zakresu danych jest ceną, jaką płacimy za korzyści wynikające z zastosowanej metody.

      Dokładność - ważna cecha metod numerycznych, jest zwykle określana przed rozpoczęciem obliczeń. Im dokładniejszy wynik chce się otrzymać, tym więcej czasu trzeba poświęcić na obliczenia.
Dla niektórych metod wynik może być uzyskany z dowolnie dużą dokładnością, lecz niektóre metody dają wynik obarczony pewnym stałym błędem, zatem zwiększanie precyzji obliczeń nic tu nie pomoże. Czemu stosuje się takie metody - ponieważ są bardzo szybkie i proste w implementacji.
W metodach numerycznych ważny jest kompromis pomiędzy czasem obliczeń, ich dokładnością oraz uniwersalnością metody.

      Uwaga, w większości zagadnień numerycznych operuje się na liczbach rzeczywistych.
Programista, który zamierza napisać program rozwiązujący zagadnienia numeryczne musi wybrać odpowiadający mu typ rzeczywisty. Najlepiej gdyby to był typ dający największą dokładność obliczeń (np. long double w języku C++). Niestety, konsekwencją takiego wyboru jest wydłużenie czasu obliczeń i zwiększenie wymaganej przez program pamięci operacyjnej. Gdy problem numeryczny jest bardzo złożony (np. w trakcie obliczeń trzeba jeszcze przydzielić dodatkową pamięć), użycie liczb o dużej precyzji może doprowadzić do szybkiego wyczerpania zasobów maszyny obliczeniowej i w konsekwencji uniemożliwić wykonanie obliczeń.

      Szukanie miejsc zerowych funkcji metodami numerycznymi

      Aby poznać i zrealizować wybrane metody numeryczne wybrałam jako przykłady szukanie miejsca zerowego konkretnej funkcji z określoną dokładnością. Zastosowane implementacje mają poważne zalety - są proste w zrozumieniu, nie wymagają wyższej matematyki, a co najważniejsze dobrze ilustrują problem.
Funkcja f(x) = x3 - 3x - 20, ma jedno miejsce zerowe, którego położenie można określić, jednak jest ono liczbą niewymierną. Szukanie miejsca zerowego tej funkcji z dokładnością 0,0001 posłuży do zaprezentowania, zilustrowania i porównania kilku wybranych metod numerycznych.


Niektóre metody numeryczne
  • Interpolacja liniowa
  • Interpolacja wielomianowa
  • Metoda Monte Carlo
  • Metoda Newtona-Cotesa
  • Wzór parabol Simsona
  • Wzór trapezów