Interpolacja sklejkami kubicznymi
Naszym zadaniem będzie interpolacja funkcji:
f (x) = sin(x)e−x w przedziale x ∈ [0..2π].
Interpolację sklejkami kubicznymi powyższej funkcji należy wykonać przy użyciu procedur spline i splint z biblioteki Numerical Recipes.
Wywołanie procedury spline w Fortranie (wywoływana jest ona tylko 1 raz):
call spline(x,y,n,yp1,ypn,y2) gdzie:
x jest tablicą: real*4 x(1:n) - zawierającą położenia węzłów funkcji interpolowanej y jest tablicą: real*4 y(1:n) - zawierającą wartości funkcji interpolowanej w węzłach xi
n - ilość węzłów
yp1 - wartość pierwszej pochodnej funkcji interpolowanej w x1
ypn - wartość pierwszej pochodnej funkcji interpolowanej w xn
y2 jest tablicą: real*4 y2(1:2) - zawierającą drugie pochodne funkcji interpolowanej
Proszę przyjąć: yp1 > 1030 oraz ypn > 1030, wówczas druga pochodna dla skrajnych węzłów (1 i n) jest zerowana. Otrzymujemy wtedy tzw. sklejki normalne.
Wywołanie procedury splint w Fortranie (wywoływana jest ona dla każdego xa dla którego chcemy znać wartość ya - pomiędzy węzłami interpolacji):
call splint(x,y,y2,n,xa,ya) gdzie:
x, y, y2, n - identyczne jak dla procedury spline
xa - aktualna wartość argumentu funkcji (dana wejściowa)
ya - wartość funkcji dla argumentu xa leżącego pomiędzy węzłami interpolacji (dana wyjściowa) Zadania do wykonania:
1. Stablicować funkcję f (x) = sin(x)e−x w przedziale x ∈ [0..2π] w n węzłach 2. Przeprowadzić interpolację sklejkami kubicznymi dla n=4,8,12,16
3. Narysować na jednym wykresie w przedziale x ∈ [0..2π]:
• wartości funkcji f(x) interpolowanej (w n punktach)
• wartości uzyskanej dla danego n funkcji interpolującej (sklejki kubicznej) w 50 punktach
4. W celu porównania liczbowego dokładności interpolacji proszę dla każdej wartości n policzyć średnie odchylenie wartości funkcji interpolującej od wartości funkcji interpolowanej (dla k=50 punktów) wg wzoru:
∆n= Pk
i=1|fdok(xi) − fint(xi)|
k Wyniki porównania zamieścić w tabeli.
Tomasz Chwiej