Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 2308 razy

Interpolacja polega na niczym innym jak na znalezieniu takiej funkcji f(x), która przechodzi przez zadane punkty interpolacyjne p1, p2, ..., pn. W tym przypadku zajmiemy się wyznaczaniem funkcji wielomianowej, która będzie przechodziła przez zadane punkty.

Wielomianem nazywamy funkcję, którą można zapisać ogólnym wzorem:

Równanie [1] [1]

Zapis wyrażenia w formacie TeX-a:

f(x)=a_1\cdot x^0+a_2\cdot x^1+...+a_n\cdot x^n

lub w postaci:

Równanie [2] [2]

Zapis wyrażenia w formacie TeX-a:

f(x)=\sum_{i=1}^{n}a_i\cdot x^{i-1}

Znając wcześniej już wspomniane punkty p1, p2, ..., pn można ułożyć n równań, w których jedynymi niewiadomymi są współczynnik a1, a2, ..., an. Układ takich równań będzie prezentował się więc następująco:

Równanie [3] [3]

Zapis wyrażenia w formacie TeX-a:

\begin{cases}y_1=a_1\cdot x_1^0+a_2\cdot x_1^1+...+a_n\cdot x_1^n \\ y_2=a_1\cdot x_2^0+a_2\cdot x_2^1+...+a_n\cdot x_2^n \\ \; \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\vdots \\y_n=a_1\cdot x_n^0+a_2\cdot x_n^1+...+a_n\cdot x_n^n\end{cases}

lub w postaci:

Równanie [4] [4]

Zapis wyrażenia w formacie TeX-a:

\begin{cases}y_1=\sum_{i=1}^n a_i\cdot x_1^{i-1} \\ y_2=\sum_{i=1}^n a_i\cdot x_2^{i-1} \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\vdots \\ y_n=\sum_{i=1}^n a_i\cdot x_n^{i-1}\end{cases}

gdzie:

Rozwiążmy więc jakieś proste zadanie:

Dane są punkty interpolacyjne: P1={0; 100}; P2={2; 228}; P3={8; 1092}; P4={4; 564}. Wyznacz interpolację wielomianową tych punktów.

Rozwiązanie:

Naj sam przód trzeba nam zapisać układ równań:

Równanie [5] [5]

Zapis wyrażenia w formacie TeX-a:

\begin{cases}a_1\cdot x_1^0+a_2\cdot x_1^1+a_3\cdot x_1^2+a_1\cdot x_1^3=y_1 \\ a_1\cdot x_2^0+a_2\cdot x_2^1+a_3\cdot x_2^2+a_1\cdot x_2^3=y_2 \\ a_1\cdot x_3^0+a_2\cdot x_3^1+a_3\cdot x_3^2+a_1\cdot x_3^3=y_3 \\ a_1\cdot x_4^0+a_2\cdot x_4^1+a_3\cdot x_4^2+a_1\cdot x_4^3=y_4\end{cases}=\begin{cases}a_1=100 \\ a_1+a_2\cdot 2+a_3\cdot 2^2+a_4\cdot 2^3=228 \\ a_1+a_2\cdot 8+a_3\cdot 8^2+a_4\cdot 8^3=1092 \\ a_1+a_2\cdot 4+a_3\cdot 4^2+a_4\cdot 4^3=564\end{cases}

Tera robimy macierz:

Równanie [6] [6]

Zapis wyrażenia w formacie TeX-a:

\begin{bmatrix} 1 && 0 && 0 && 0 && 100 \\ 1 && 2 && 4 && 8 && 228 \\ 1 && 8 && 64 && 512 && 1092 \\ 1 && 4 && 16 && 64 && 564 \end{bmatrix}

a ponieważ tak się dziwnie składa, że kiedyś napisałem sobie mały konsolowy programik, który rozwiązuje układy równań metodą eliminacji Gaussa, wystarczy mu podać na wejście takie oto dane:

4 1 0 0 0 100 1 2 4 8 228 1 8 64 512 1092 1 4 16 64 564

Aby program w ramach rekompensaty wypluł na ekran rozwiązanie:

Przeliczanie macierzy do postaci macierzy jednostkowej: 1 0 0 0 100 1 2 4 8 228 1 8 64 512 1092 1 4 16 64 564 Etap 1: 1 0 0 0 100 1 2 4 8 228 1 8 64 512 1092 1 4 16 64 564 1 0 0 0 100 0 2 4 8 128 0 8 64 512 992 0 4 16 64 464 Etap 2: 1 0 0 0 100 0 1 2 4 64 0 8 64 512 992 0 4 16 64 464 1 0 0 0 100 0 1 2 4 64 0 0 48 480 480 0 0 8 48 208 Etap 3: 1 0 0 0 100 0 1 2 4 64 0 0 1 10 10 0 0 8 48 208 1 0 0 0 100 0 1 0 -16 44 0 0 1 10 10 0 0 0 -32 128 Etap 4: 1 0 0 0 100 0 1 0 -16 44 0 0 1 10 10 -0 -0 -0 1 -4 1 0 0 0 100 0 1 0 0 -20 0 0 1 0 50 -0 -0 -0 1 -4

Rozwiązanie naszego układu równań jest więc następujące:

Równanie [7] [7]

Zapis wyrażenia w formacie TeX-a:

\begin{cases} a_1=100 \\ a_2=-20 \\ a_3=50 \\ a_4=-4 \end{cases}

Szukana funkcja ma więc następującą postać:

Równanie [8] [8]

Zapis wyrażenia w formacie TeX-a:

f(x)=-4\cdot x^3+50\cdot x^2-20\cdot x+100

Na poniższym wykresie można sprawdzić czy nasza funkcja f(x) pokrywa się z punktami, które ma ona interpolować.

Interpolacja punktów020040060080010001200-10123456789f(x) = 4·x3 +50·x2 -20·x+100Punkty interpolowane
Rys. 1
Wykres funkcji f(x) interpolującej zadane punkty.
Źródło:
Wykres wygenerowany przez skrypt PHP autora strony opisany na stronie Programowanie → Skrypty PHP → Skrypt PHP generujący wykres funkcji 2W

Załączniki:

Napisany przeze mnie program RownaniaLiniowe