metody numeryczne sciaga 28Naprawiony 29 (2)

Interpolacja

W ograniczonym przedziale rozpatrzmy ciąg punktów:

(1)

które nazywamy węzłami interpolacji oraz ciąg liczb rzeczywistych:

(2)

które interpretujemy jako dane wartości pewnej funkcji Funkcja jest zatem wyznaczana w sposób dyskretny za pomocą jej wartości na zbiorze (1)

(3)

Interpolacja, ekstrapolacja

Cel interpolacji

Znalezienie funkcji odpowiedniej klasy przechodzącej przez dany zestaw punktów (węzłów) w przestrzeni dwu- lub więcej wymiarowej.

Rodzaje interpolacji:

Zastosowania interpolacji

Interpolacja liniowa

Zależnie od postaci funkcji interpolującej sformułowane zadanie interpolacji może mieć dokładnie jedno rozwiązanie, może nie mieć rozwiązań albo mieć ich nieskończenie wiele.

W przypadku wielomianu

(4)

z warunków interpolacji (3) otrzymujemy następujący układ równań liniowych:

(5)

w którym niewiadomymi są współczynniki Wyznacznik podstawowy tego układu równań jest wyznacznikiem Vandermonda

Tak więc układ równań (5) ma dokładnie jedno rozwiązanie, które przyjmujemy jako współczynniki szukanego wielomianu interpolacyjnego (4).

Interpolacja wielomianowa

Niech mamy układ liniowo-niezależnych funkcji

(6)

określonych na ograniczonym lub nieograniczonym przedziale .

Należy znaleźć takie współczynniki

(7)

których kombinacja liniowa z funkcjami (6) spełnia warunki interpolacji (3)

(8)

Zauważmy, że w zadaniu interpolacji (4) - (5) przyjęliśmy następujący układ funkcji liniowo-niezależnych:

(9)

Interpolacja Lagrange’a

Wielomian interpolacyjny (n punktów danych, stopień n-1):

Macierz charakterystyczna układu równań (8) jest więc macierzą jednostkową i wynika stąd, że wielomian

(12)

jest wielomianem stopnia co najwyżej n, przyjmującym w węzłach interpolacji wartości (3). Otrzymany wielomian nazywany jest wielomianem interpolacyjnym Lagrange’a.

Wprowadzając oznaczenie

(13)

możemy wzór (12) zapisać w postaci

, (14)

gdzie (15)

W charakterze przykładu znajdziemy wielomian interpolacyjny Lagrange’a, który w punktach: -2, 1, 2, 4 przyjmuje wartości: 4, 2, -1, 10. Ze wzoru (12) dla n = 3 mamy

W szczególnym przypadku dla n = 1 ze wzoru (12) otrzymamy znany wzór interpolacji liniowej

W podobny sposób dla n = 2 wyznaczymy równanie paraboli przechodzącej przez trzy punkty:

(16)

Jeśli węzły interpolacji są równoodległe

(17)

gdzie: (), wtedy po wprowadzeniu pomocniczej zmiennej

(18)

wielomian oraz jego pochodną można zapisać następująco:

(19)

co pozwala na znaczne uproszczenie postaci wielomianu interpolacyjnego (14)

Oszacowanie błędu wzoru interpolacyjnego

Uwaga! Wyższy stopień wielomianu interpolacyjnego (więcej węzłów) wcale nie musi oznaczać poprawy jakości interpolacji. Przykładem negatywnym jest interpolowanie funkcji y=|x| lub y=1/(1+ax2). Wręcz przeciwnie: im niższy stopień wielomianu tym bezpieczniej.

INTERPOLACJA NEWTONA

Interpolacja Newtona jest oparta na przyjęciu jako układu funkcji liniowo-niezależnych wielomianów czynnikowych postaci:

(21)

Po podstawieniu tej bazy do (8) otrzymujemy układ równań z trójkątną macierzą charakterystyczną:

(4.22)

Przed rozwiązaniem tego układu równań niezbędne jest wprowadzenie pojęcia ilorazów różnicowych. Dla funkcji określonej na dyskretnym zbiorze argumentów (3) definiujemy ilorazy różnicowe pierwszego rzędu:

(23)

oraz rekurencyjnie ilorazy różnicowe rzędu k

(24)

Obliczanie powyższych ilorazów różnicowych można wykonać w łatwiejszy sposób przy wykorzystaniu zależności

(25)

lub posługując się następującą tablicą ilorazów różnicowych:

Przykładowo dla wielomianu trzeciego stopnia dla węzłów interpolacji: tablica ilorazów różnicowych ma postać:

Rozwiązując kolejne równania układu równań (22) otrzymujemy:

(26)

Tak więc wzór interpolacyjny Newtona ma postać:

(27)

Współczynniki   wielomianu interpolacyjnego Newtona

(28)

można wyznaczyć również w inny sposób, wykorzystując zależność rekurencyjną

Wielomiany mają współczynnik równy jedności przy zatem współczynnik jest równy współczynnikowi przy w wielomianie interpolacyjnym Lagrange’a

Stąd oraz na mocy związku (25) jest

Przykład. Znaleźć wielomian interpolacyjny Newtona, który w punktach: 0, 2, 3, 5 przyjmuje
wartości: 1, 3, 2, 5.

Sporządzamy najpierw tablicę ilorazów różnicowych:

i następnie otrzymujemy

Wyznaczanie przedziałów izolacji

Metoda bisekcji

Metoda równego podziału (metoda połowienia, metoda bisekcji, metoda połowienia przedziału) - jedna z metod rozwiązywania równań nieliniowych. Opiera się ona na następującym twierdzeniu: Jeżeli funkcja ciągła f(x) ma na końcach przedziału domkniętego wartości różnych znaków, to wewnątrz tego przedziału, istnieje co najmniej jeden pierwiastek równania f(x) = 0.

Mamy daną funkcję f(x) oraz przedział <a,b>, w którym będziemy poszukiwali miejsca zerowego. Aby można było zastosować algorytm połowienia muszą być spełnione poniższe warunki:

Funkcja f(x) jest określona w każdym punkcie przedziału <a,b>. Określoność funkcji oznacza, iż dla każdej wartości argumentu x z przedziału <a,b> potrafimy policzyć wartość funkcji.

Kroki algorytmu

Gdy funkcja f(x) spełnia powyższe trzy warunki, to w przedziale <a,b> zagwarantowane jest istnienie pierwiastka i możemy go wyszukać algorytmem połowienia. Zasada jest następująca:

1. Wyznaczamy punkt xo jako środek przedziału <a,b>.

2. Obliczamy wartość funkcji w punkcie xo. Sprawdzamy, czy f(xo) znajduje się dostatecznie blisko 0:

3. Jeśli nierówność jest spełniona, to xo jest poszukiwaną wartością pierwiastka. Zwracamy wynik i kończymy algorytm. W przeciwnym razie za nowy przedział poszukiwań pierwiastka przyjmujemy tą połówkę <a,xo> lub <xo,b>, w której funkcja zmienia znak na krańcach i przechodzimy ponownie do punktu 1.

Warunki zakończenia obliczeń

Algorytm powtarzamy od początku dotąd, aż:

  1. znajdziemy pierwiastek, czyli spełniona będzie nierówność

  2. przedział <a,b> osiągnie założoną długość (może to być również epsilon)

  3. wykonamy określoną ilości iteracji.

Metoda stycznych

Metoda stycznych (Newtona) opiera się na następującej zasadzie: dla danego przybliżenia początkowego x0 tworzy się ciąg x1, x2, …

Element xn+1 wyznaczamy aproksymując funkcję f(x) styczną do jej wykresu w punkcie (xn, f(xn)) i wybierając xn+1 jako odciętą punktu przecięcia tej stycznej z osią x. Dlatego do wyznaczenia xn+1 służy równanie:

f(xn) + (xn+1 - xn)f’(xn) = 0

Metodę Newtona określa następujący wzór iteracyjny:

xn+1 = xn + hn gdzie hn = -f(xn)/f’(xn)

Kroki algorytmu

  1. Sprawdzamy, czy w punkcie x0 funkcja spełnia warunek: f’(x0) f’’(x0) > 0

  1. Obliczamy kolejną iterację z wcześniej podanego wzoru.

  2. Sprawdzamy, czy otrzymane przybliżenie jest dostatecznie bliskie zeru.

Wybieranie punktu początkowego w przypadku, gdy dany jest przedział izolacji pierwiastka

Jeżeli dany jest przedział [a,b] występowania pierwiastka, to możemy posłużyć się następującą zasadą wyboru punktu początkowego, aby proces był stabilny:

  1. jeżeli f’(a) f’’(a) > 0 to x0 = a;

  2. jeżeli f’(a) f’’(a) < 0 to x0 = b.

Oczywiście na krańcach przedziału funkcja musi posiadać przeciwne znaki, gdyż gwarantuje to istnienie pierwiastka.

Warunki zakończenia algorytmu

  1. wartość f(xn) leży dostatecznie blisko zera – o mniej niż zadana dokładność

  2. wartość hn jest mniejsza od zadanej dokładności

Metoda cięciw (reguła falsi)

Niech dany będzie przedział izolacji pierwiastka funkcji f(x) pokazanej na rysunku – [a,b]. Jako pierwsze przybliżenie wybieramy punkt przecięcia prostej łączącej punkty (a,f(a)) i (b,f(b)) z osią x.

Punkt przecięcia można wyznaczyć ze wzoru: x1 = a - f(a)(b - a)/(f(b) - f(a)).

Do wyznaczenia drugiego przybliżenia x2 bierze się drugi zestaw punktów (x1,f(x1)) i (b,f(b)), otrzymując:

x2 =x1 - f(x1)(b - x1)/(f(b) - f(x1)).

Ogólnie można napisać, że w i+1 przybliżeniu wartość pierwiastka wynosi:

xi+1 = xi - f(xi)(b - xi)/(f(b) - f(xi)).

Dla funkcji pokazanej na rysunku przybliżenia mają następującą postać:

x1 = b - f(b)(a - b)/(f(a) - f(b)).

x2 =x1 - f(x1)(a - x1)/(f(a) - f(x1)).

xi+1 = xi - f(xi)(a - xi)/(f(a) - f(xi)).

Ogólnie można napisać:

xi+1 = xi - f(xi)(xp - xi)/(f(xp) - f(xi))

gdzie xp to a lub b zgodnie z następującą regułą:

  1. jeżeli f’(c) f’’(c) > 0 to xp = b;

  2. jeżeli f’(c) f’’(c) < 0 to xp = a,

gdzie c = (a + b)/2.

Kompresja

Kompresja BEZSTRATNA

Nie dopuszcza utraty informacji, czyli po dekompresji otrzymujemy dane zgodne z oryginałem.

Kompresja STRATNA

Dopuszcza pewną stratę informacji. Dane, które zostały skompresowane w ten sposób, nie można zazwyczaj odtworzyć dokładnie z wersji zakodowanej.

Sensowną miarą tego, jak efektywnie algorytm kompresuje określony zbiór danych, jest stosunek liczby bitów potrzebnych do reprezentacji danych przed kompresją do liczby bitów potrzebnych do reprezentacji danych po kompresji. Proporcja ta nazwana jest stopniem kompresji. np. Przyjmijmy, że dla obrazu będącego kwadratową tablicą o rozmiarze 256x256 pikseli potrzeba 65536 bajtów. Jeśli skompresowana postać tego obrazu zajmuje 16384 bajty, to stopień kompresji wynosi 4:1

Stopień kompresji można przedstawić jako redukcję rozmiaru danych wyrażoną procentowo względem rozmiaru danych oryginalnych ( 75%)

Średnia bitowa – średnia liczba bitów potrzebna do reprezentacji pojedynczej próbki(2 gdy przyjmiemy, że na piksel przypada 8 bit)

Metoda kodowania długich serii

Metoda unikatowej wartości

Metoda RLE (Run Length Encoding)

Metoda HUFFMANA (1960)

Budowa drzewa Huffmana

Założenia:

Algorytm:

  1. Pobierz dwa drzewa o najmniejszej wadze i użyj ich jako liści do nowego drzewa, którego wagą będzie suma jego liści

  2. Dwa pobrane drzewa usuń z listy wstawiając tam nowopowstałe

  3. Wejście: ciąg 17 znaków = AGAAKHAGAAHKAKHA

  1. Wybierz dwa znaki o najmniejszej liczbie wystąpień i utwórz z nich liście korzenia drzewa, w którym zapisz sumę ich wag

  2. Wybierz następne dwa znaki o najmniejszych wagach i utwórz z nich taką sama strukturę

  1. Kolejna dwa najmniejsze wagi to wagi powstałych korzeni dlatego potraktuj je jako liście następnego korzenia drzewa

  2. Na koniec został tylko korzeń z waga 9 i znak „A” z wagą 8. Połącz je ze sobą. Efektem końcowym jest drzewo Huffmana z wagą końcową korzenia równą liczbie wszystkich znaków

  3. Do każdego znaku prowadzi tylko jedna droga. Oznaczając na każdym węźle drogę do lewego liścia przez 0, a do prawego poprzez 1, możemy wygenerować drogę od korzenia drzewa do każdego znaku poprzez ciąg zerojedynkowy, czyli liczbę binarna

  4. Im znak występuje częściej w danych wejściowych tym przypisany ma krótszy kod.

W naszym przykładzie:

Wejście:AGAAKHAGEAAHKAKHA, długość = 17[bajtów] = 136 [bitów]

Wyjście:10011101001110011101101010100111, długość =32[bity]


Wyszukiwarka