W tym rozdziale zajmiemy się interpolacją wielomianową.
Zadanie interpolacji wielomianowej polega na znalezieniu wielomianu stopnia nie większego od , spełniającego
warunków interpolacyjnych.
W octave'ie istnieje funkcja znajdująca współczynniki wielomianu interpolacyjnego Lagrange'a. Jest to funkcja polyfit()
, czyli funkcja obliczająca współczynniki wielomianu interpolacyjnego w bazie potęgowej dla zadanych wartości i węzłów.
Z kolei funkcja polyval()
jest funkcją obliczającą wartość wielomianu zadanego poprzez współczynniki w bazie potęgowej w jednym lub równocześnie wielu punktach - czyli wektorowo. Co ważne, obie funkcje są ze sobą zgodne. Trzeba uważać na kolejność współczynników; octave numeruje współczynniki w bazie potęgowej
przestrzeni wielomianów stopnia nie większego od w odwrotnej kolejności tzn.
czyli np.
wektor współczynników odpowiada wielomianowi
.
Oczywiście stopnień wielomianu, a dokładniej: dla jakiego rozpatrujemy bazę potęgową dla tego wektora, jest długością wektora współczynników pomniejszoną o jeden.
- Zapoznaj się z pomocą octave'a do funkcji octave'a
polyval()
.
Oblicz wartość wielomianudla
.
-
Korzystając z funkcji
polyval()
narysuj wykres wielomianu
bez wykorzystania pętli - czyli wektorowo.
- Test funkcji
polyfit()
.Zapoznaj się z pomocą octave'a do funkcji octave'a
polyfit()
.Wykorzystując funkcję
polyfit()
znajdź wielomian interpolacyjnydla funkcji
dla węzłów
.
Policz wartości różnicyw węzłach oraz korzystając z funkcji
plot()
narysuj wykresyi
na jednym rysunku.
Wykonaj powtórnie to zadanie ale dla węzłów
.
Oblicz wartości wielomianu bez użycia pętli z wykorzystaniem funkcji
polyval()
. - (#)
Interpolacja Lagrange'a - zbieżność ciągu wielomianów interpolacyjnych dla węzłów równoodległych i węzłów Czebyszewa: -
Wykorzystując funkcję
polyfit()
znajdź wielomiany interpolacyjnedla funkcji
dla
węzłów równoodległych na
dla
.
-
Oblicz dyskretną normę maksimum różnicy
na siatce tysiąca równoodległych punktów na tym odcinku, tzn.
, gdzie
to punkty siatki. Policz stosunek
dla
.
Czy błędy maleją do zera? Jak zachowuje się
?
Siatkę tysiąca równoodległych punktów na odcinku
najprościej utworzyć z wykorzystaniem funkcji octave'a: \\
linspace(a,b,1000)
. - Narysuj na ekranie wykresy
i tych wielomianów dla różnych
- używając funkcji
polyval()
iplot()
. - Powtórz zadanie [link] dla tej samej funkcji i tego samego odcinka dla węzłów Czebyszewa.
Węzły Czebyszewa to pierwiastki wielomianu:na
odpowiednio przesunięte i przeskalowane.
Przetestuj, czy błędy
dla węzłów Czebyszewa są mniejsze niż dla węzłów równoodległych.
- Napisz funkcję znajdującą współczynniki w bazie potęgowej wielomianu interpolacyjnego zadanego stopnia dla węzłów równoodległych oraz węzłów Czebyszewa dla danej funkcji, odcinka
, tzn. napisz funkcję octave'a (w m-pliku):
która dla parametrów:
- zadanego wskaźnika funkcyjnego FCN (ang. function handle) do funkcji jednego argumentu:
function y=f(x)
, -
- końców odcinka
,
-
- stopnia wielomianu interpolacyjnego
-
type
- typu węzłów- równoodległych,
- Czebyszewa
- Powtórz zadanie [link] dla obu typów węzłów, tzn. powtórz znajdowanie wielomianów interpolacyjnych na węzłach równoodległych i węzłach Czebyszewa dla funkcji
na odcinkach
-
,
-
.
-
Interpolacja Lagrange'a - przykład Rungego. Powtórz zadanie [link] dla obu typów węzłów, tzn. znajdowanie wielomianów interpolacyjnych na węzłach równoodległych i węzłach Czebyszewa, ale dla funkcji:
na
.
Czy obliczone wyniki wskazują na to, że obliczone ciągi wielomianów interpolacyjnych zbiegają do
jednostajnie dla obu typów węzłów?
- Napisz funkcję octave'a obliczającą wartość wielomianu zadanego w bazie
potęgowej tzn.algorytmem Hornera.
Parametrami funkcji będą - wektor współczynników
- macierz wartości
.
-
- stopnień wielomianu (to może być parametr opcjonalny, domyślnie przyjmujący wartość równą długości wektora
minus jeden)
- Napisz funkcję octave'a znajdującą dla danego wielomianu stopnia
:
oraz danej liczby
współczynniki
wielomianu
oraz wartość
takie, że
obliczone z wykorzystaniem algorytmu Hornera.
- Napisz funkcję octave'a znajdującą dla danego wielomianu stopnia
:
oraz liczby
wartość
i pochodnej
, obliczone z wykorzystaniem algorytmu Hornera.
- Algorytm Hornera w bazie Newtona. Różnice dzielone.
Zaprogramuj w octavie funkcję ze zmodyfikowanym algorytmem Hornera zwracającą wartość wielomianu zadanego w bazie Newtona dla danych węzłów.
Parametrami będą -
punkt, w którym obliczamy wielomian (ewentualnie tablica punktów, ale wtedy funkcja też musi zwrócić wektor z wartościami wielomianu w tych punktach),
-
- stopnień wielomianu,
- wektor długości
ze współczynnikami wielomianu w bazie Newtona.
- Napisz funkcję octave'a, która dla danego wielomianu
, którego współczynniki w bazie
potęgowej znamy, oblicza współczynniki tego wielomianu w bazie Newtona dla zadanych węzłów podanych w wektorze. Tzn. parametrami funkcji będą:
-
wektor
taki, że
-
wektor współczynników bazy Newtona.
- Napisz funkcję, która dla danego wielomianu
, którego współczynniki w bazie
Newtonaznamy, oblicza współczynniki tego wielomianu w bazie potęgowej
. Tzn. parametrami funkcji jest wektor współczynników
takich, że
i wektor
węzłów bazy Newtona
dlaFunkcja ma zwrócić wektor współczynników
takich, że
- Sprawdź eksperymentalnie ile wynosi dla różnych wartości
przybliżenie:
dla
bazy Lagrange'a dla węzłów równoodległych na
, tzn. dla
dla
.
Normę maksimum funkcji
liczymy w sposób przybliżony obliczając dyskretną normę maksimum na
równoodległych punktach z odcinka
.
- Sprawdź eksperymentalnie ile wynosi dla różnych
np.
przybliżenie:
dla
bazy Lagrange'a dla węzłów Czebyszewa na
, tzn. dla
zer wielomianu
.
Normę maksimum funkcji
liczymy w sposób przybliżony obliczając dyskretną normę maksimum na
równoodległych punktach z odcinka
.
- Powtórz dwa poprzednie zadania dla węzłów równoodległych i węzłów Czebyszewa na odcinku
i dla odpowiedniej normy maksimum na tym odcinku.
- Policz iloraz
dla
i
wielomianu interpolującego
w węzłach równoodległych na
dla
. Tutaj
baza Lagrange'a dla tych węzłów.
Normę maksimum funkcji
liczymy w sposób przybliżony obliczając dyskretną normę maksimum na
równoodległych punktach z odcinka
.
- Powtórz poprzednie zadanie dla tych samych funkcji i odcinka dla węzłów Czebyszewa zamiast węzłów równoodległych.
zwróci wektor - współczynniki
wielomianu interpolującego funkcję w tych węzłach oraz
przybliżenie dyskretnej normy maksimum różnicy
na tym odcinku.
Przybliżenie normy maksimum liczymy na dyskretnej siatce zawierającej tysiąc punktów.
Czy dla tej funkcji i obu odcinków błędy w normach maksimum maleją wraz ze wzrostem ? Porównaj wyniki otrzymane w tym zadaniu w obliczeniach z oszacowaniami teoretycznymi błędu interpolacji Lagrange'a.
Funkcja ma zwrócić wartości wielomianu dla wartości w .
Przetestuj funkcję dla wielomianów oraz
dla węzłów równoodległych na
, tzn. policz wartości wielomianów dla kilku wartości oraz narysuj wykresy tych wielomianów z wykorzystaniem tej funkcji.
Przetestuj na kilku prostych przykładach: dla węzłów i wielomian
, który w bazie Newtona związanej z tymi węzłami ma następującą postać:
.
Funkcja powinna zwrócić wektor współczynników takich, że
gdzie