Zastosowanie metod rozwiązywania układów równań liniowych w interpolacji punktów funkcją wielomianową

Stronę tą wyświetlono już: 380 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:

  • yk - współrzędna y punktu interpolacyjnego Pk
  • xk - współrzędna z punktu interpolacyjnego Pk

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:

Listing 1
  1. 4
  2. 1 0 0 0 100
  3. 1 2 4 8 228
  4. 1 8 64 512 1092
  5. 1 4 16 64 564

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

Listing 2
  1. Przeliczanie macierzy do postaci macierzy jednostkowej:
  2. 1 0 0 0 100
  3. 1 2 4 8 228
  4. 1 8 64 512 1092
  5. 1 4 16 64 564
  6. Etap 1:
  7. 1 0 0 0 100
  8. 1 2 4 8 228
  9. 1 8 64 512 1092
  10. 1 4 16 64 564
  11. 1 0 0 0 100
  12. 0 2 4 8 128
  13. 0 8 64 512 992
  14. 0 4 16 64 464
  15. Etap 2:
  16. 1 0 0 0 100
  17. 0 1 2 4 64
  18. 0 8 64 512 992
  19. 0 4 16 64 464
  20. 1 0 0 0 100
  21. 0 1 2 4 64
  22. 0 0 48 480 480
  23. 0 0 8 48 208
  24. Etap 3:
  25. 1 0 0 0 100
  26. 0 1 2 4 64
  27. 0 0 1 10 10
  28. 0 0 8 48 208
  29. 1 0 0 0 100
  30. 0 1 0 -16 44
  31. 0 0 1 10 10
  32. 0 0 0 -32 128
  33. Etap 4:
  34. 1 0 0 0 100
  35. 0 1 0 -16 44
  36. 0 0 1 10 10
  37. -0 -0 -0 1 -4
  38. 1 0 0 0 100
  39. 0 1 0 0 -20
  40. 0 0 1 0 50
  41. -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 przes skrypt PHP autora strony opisany na stronie Programowanie → Skrypty PHP → Skrypt PHP generujący wykres funkcji 2W

Załączniki:

Napisany przeze mnie program RownaniaLiniowe

Komentarze