Interpolacja funkcjami sklejanymi poprzez wyznaczenie
wartości drugich pochodnych w węzłach.
Tomasz Chwiej
12 listopada 2012
Naszym zadaniem będzie napisanie programu do interpolacji przy pomocy funkcji sklejanych
będących wielomianami 3 stopnia.
1
Program
1. Napisać procedurę do wyznaczania wartości drugich pochodnych w węzłach. Do procedury
należy przekazać: a) wektor z położeniami węzłów (xw), b) wektor z wartościami funkcji
(yw), c) liczbę węzłów (n), d) wektor do którego procedura zapisze wartości drugich
pochodnych (w), e) wartości drugich pochodnych w skrajnych węzłach (alfa i beta)
void wyzM(float *xw,float *yw, float *w, int n, float alfa, float beta)
Uwaga: wszystkie elementy wektorów indeksujemy od 1 - żeby uniknąć pro-
blemów w dalszej części zadania (rozwiązywanie układu równań). Całkowita
liczba węzłów będzie więc równa n.
W celu wyznaczenia wartości drugich pochodnych trzeba skonstruować na podstawie od-
ległości pomiędzy węzłami oraz wartości funkcji odpowiedni układ równań - tak jak po-
kazano to na wykładzie. Przyjąć warunki z drugą pochodną równą 0 na obu krańcach
przedziału interpolacji. W pierwszym i ostatnim wierszu układu równań znajduje się 1
na diagonali a pozostałe elementy są równe 0. W wektorze wyrazów wolnych w miejsce
pierwszego elementu wstawiamy wartość α, a do ostatniego elementu wartość β.
Układ równań rozwiązać metodą gaussj z Numerical Recipes.
2. Napisać procedurę do wyznaczania wartości funkcji w położeniu międzywęzłowym. Część
argumentów będzie identyczna jak dla procedury wyzM, ale dodajemy jeszcze wartość
aktualną x:
float wyzX(float *xw,float *yw, float *w, int n, float x){
y=........................
return y;
}
W procedurze najpierw trzeba określić w którym przedziale znajduje się x , a następnie
wyznaczyć wartość korzystając z wzorów pokazanych na wykładzie.
1
Uwaga: Może się zdarzyć że x pokryje się z położeniem któregoś z węzłów tj.
odległość między nimi będzie mniejsza niż 10
−2
h
i
(h
i
jest szerokością podprze-
działu). Trzeba wykryć taki przypadek i od razu zwrócić wartość funkcji w
danym węźle.
3. Napisać program do interpolacji funkcjami sklejanymi, który będzie korzystał z dwóch
powyższych procedur.
2
Wyniki
Przy użyciu swojego programu przeprowadzić interpolację funkcji
f
1
(x) =
1
1 + x
2
(1)
oraz
f
2
(x) = cos(2x)
(2)
Zadania do wykonania:
1. Dla funkcji f
1
(x) oraz 10 węzłów w przedziale x
∈ [−5, 5] należy wyznaczyć wartości
drugich pochodnych i porównać je z ”dokładniejszymi” wartościami liczonymi zgodnie z
wzorem:
d
2
f
dx
2
≈
f (x
− ∆x) − 2f(x) + f(x + ∆x)
(∆x)
2
(3)
Przyjąć ∆x = 0.01. Wykonać wykres wartości drugich pochodnych w zależności od poło-
żenia węzłów pokazujący porównanie obu sposobów obliczania drugich pochodnych.
2. Wykonać interpolację dla f
1
(x) oraz f
2
(x) w przedziale x
∈ [−5, 5], dla liczby węzłów:
5,8,21. Wykonać rysunki funkcji interpolowanej i interpolującej dla każdego przypadku.