MN11LAB

From Studia Informatyczne


Splajny

<<< Powrót do strony głównej przedmiotu Metody numeryczne

Oglądaj wskazówki i rozwiązania
Ukryj wskazówki i rozwiązania

Ćwiczenie

Niech \displaystyle h>0 i \displaystyle c\inR. Wyznacz współczynniki kubicznej funkcji sklejanej \displaystyle s opartej na pięciu węzłach \displaystyle -2h,-h,0,h,2h i spełniającej dodatkowo następujące warunki interpolacyjne:

\displaystyle s(0)\,=\,c,\qquad\quad   s^{(k)}(\pm 2h)\,=\,0,\qquad k=0,1,2, \\

Ćwiczenie

Porównaj ze sobą interpolację wielomianową i splajnową opartą na \displaystyle N węzłach.

Rozpatrz funkcję \displaystyle f(x) = \sin(x) i następujące przypadki:

  • węzły równoodległe lub nie;
  • odcinek krótki lub długi;
  • węzłów mało lub dużo.
Rozwiązanie

Możesz korzystać z następującego szablonu w Octave:

a = 0; b = 10; # długość przedziału
N = 7; # liczba węzłów;

x = linspace(a,b,N); 	# węzły równoodległe
y = sin(x);		# wartości w węzłach

s = spline(x,y);
w = polyfit(x,y,N+1);

X = linspace(a,b,256); # punkty do wykresu
plot(X,[sin(X);ppval(s,X);polyval(w,X)]);

Polecam przeanalizowanie przypadku, gdy \displaystyle N=30.

Ćwiczenie

Zaimplementuj w C funkcje analogiczne do Octave'owskich spline i ppval. Pamiętaj, by skorzystać z efektywnego narzędzia do rozwiązywania układów równań!

Rozwiązanie

Macierz jest trójdiagonalna i diagonalnie dominująca, więc albo zaimplementujesz własną metodę przeganiania, albo skorzystasz z DGBSV z LAPACKa. Decyzję podejmij po przeprowadzeniu testów porównawczych czasów wykonania obu wariantów.

Ćwiczenie: Kubiczne splajny okresowe są dobrze określone

Pokaż jednoznaczność rozwiązania zadania interpolacyjnego w przypadku kubicznych okresowych funkcji sklejanych, tzn. takich, w których warunki interpolacji uzupełnione są warunkiem

\displaystyle \aligned s'(x_0) &= s'(x_N)\\ s''(x_0) &= s''(x_N). \endaligned

Wskazówka

Zastosuj technikę dowodową podobną do tej z przypadku naturalnych funkcji sklejanych.

Ćwiczenie

Sprawdź eksperymentalnie, jaka aproksymacja funkcji \displaystyle f(x) = x\sin(\frac{1}{x}) (pamiętaj, \displaystyle f(0)=0) jest "wizualnie" lepsza na odcinku \displaystyle [0,5]:

  • wielomianem interpolacyjnym, opartym na \displaystyle N węzłach równoodległych
  • wielomianem interpolacyjnym, opartym na \displaystyle N węzłach Czebyszewa
  • splajnem interpolacyjnym stopnia 1, opartym na \displaystyle N węzłach równoodległych
  • naturalnym splajnem kubicznym interpolacyjnym, opartym na \displaystyle N węzłach równoodległych

Eksperymentuj z różnymi wartościami \displaystyle N.

Wskazówka

Samo sprawdzenie najprościej wykonać w Octave; jeśli sumiennie rozwiązywałeś dotychczasowe zadania, powinieneś też dysponować zestawem funkcji generującym większość wymaganych w zadaniu interpolantów.