Metody numeryczne Sprawozdanie lista 4. Paweł Gambuś, 194260, Informatyka III rok, grupa: środa, godz. 7:30 13 grudnia 2013
Spis treści 1
Zadanie 1.
1.1 1.2 1.3 2
5
Przedstawienie problemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozwiązanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wyniki oraz interpretacja, wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . Przedstawienie problemu . Rozwiązanie . . . . . . . . Wyniki oraz interpretacja Wnioski . . . . . . . . . . Przedstawienie problemu . Rozwiązanie . . . . . . . . Wyniki oraz interpretacja Wnioski . . . . . . . . . .
2 3 3 3
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Zadanie 5.
5.1 5.2 5.3 5.4
2 2 2 2
Zadanie 4.
4.1 4.2 4.3 4.4
2 2 2 2
Przedstawienie problemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozwiązanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wyniki oraz interpretacja, wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zadanie 3.
3.1 3.2 3.3 4
Przedstawienie problemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozwiązanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wyniki oraz interpretacja, wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zadanie 2.
2.1 2.2 2.3 3
2
. . . .
3 4 4 7 7
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
1
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. 7 . 7 . 7 . 10
1
Zadanie 1.
1.1
Przedstawienie problemu
Zadaniem było napisanie funkcji obliczającej ilorazy różnicowe.
1.2
Rozwiązanie
Został napisany program dla Octave’a realizujący następujący algorytm: Input: x-wektor zawierający węzły x(1) = x 0 ,...,x(n + 1) = x n ,
f -wektor zawierający wartości interpolowanej funkcji f (1) = f (x0 ),...,f (n + 1) = f (xn ). Output: f x-wektor zawierający obliczone ilorazy różnicowe f x(1) = f (x0 ),...,f (n + 1) = f (xn ). Algorytm: len ← length(f ); f x = copy(f ); for i ← 1 to len do f x(i) ← f (1); for j ← 1 to len − i do f ( j) ← (f ( j + 1) − f ( j))/(x(i + j) − x( j)); end end return f x;
1.3
Wyniki oraz interpretacja, wnioski
Rozwiązanie zostało przetestowane skryptem testującym. Wyniki testu zostały przedstawione w opracowaniu zadań czwartego i piątego.
2 2.1
Zadanie 2. Przedstawienie problemu
Zadaniem było napisanie funkcji obliczającej wartość wielomianu interpolacyjnego stopnia n w postaci Newtona N n (x) w punkcie x = t za pomocą uogólnionego algorytmu Hornera.
2.2
Rozwiązanie
Został napisany program dla Octave’a realizujący następujący algorytm:
2.3
Wyniki oraz interpretacja, wnioski
Rozwiązanie zostało przetestowane skryptem testującym. Wyniki testu zostały przedstawione w opracowaniu zadań czwartego i piątego.
3 3.1
Zadanie 3. Przedstawienie problemu
Zadaniem było napisanie funkcji interpolującej zadaną funkcję f (x) w przedziale [a, b] za pomocą wielomianu interpolacyjnego stopnia n w postaci Newtona. Następnie funkcja powinna rysować 2
Input: x - wektor długości n + 1 zawierający węzły x 0 ,...,x 1 : x(1) = x 0 ,...,x(n + 1) = x n .
f x - wektor długości n + 1 zawierający ilorazy różnicowe f x(1) = f [x0 ],...,fx(n + 1) = f (xn ) t - punkt, w którym należy obliczyć wartość wielomianu. Output: nt - wartość wielomianu w punkcie t. Algorytm: len ← length(f x); result ← f x; for i = 1 to len − 1 do result(len − i) = f x(len − i) + (t − x(len − i)) · result(len − i + 1); end return result(1);
wielomian interpolacyjny i interpolowaną funkcję.
3.2
Rozwiązanie
Został napisany program dla Octave’a realizujący następujący algorytm: Input: f - nazwa m-pliku z funkcją,
a, b - przedział interpolacji, n - stopień wielomianu interpolacyjnego. Output: Funkcja rysuje wykres funkcji interpolowanej i interpolującej. Algorytm: dokladnoscWykresu ← 5//parametr-im większy, tym większa dokładność; odleglosc ← (b − a)/n; wezly ← 0 : 1 : n; wezly ← wezly · odleglosc + a; wartosciInterpolowanej ← f (wezly) ilorazy ← ilorazyRoznicowe(wezly, wartosciInterpolowanej); args ← a : (odleglosc/dokladnoscWykresu) : b; for i ← 1 to length(args) do interpolujacaW artosci(i) ← warN ewton(wezly,ilorazy,args(i)); end
rysujWykres(args,f ); rysujWykres(args, interpolujacaW artosci);
3.3
Wyniki oraz interpretacja, wnioski
Rozwiązanie zostało przetestowane skryptem testującym. Wyniki testu zostały przedstawione w opracowaniu zadań czwartego i piątego.
4
Zadanie 4.
4.1
Przedstawienie problemu
Zadanie polegało na przetestowaniu funkcji rysujNnfx(f,a,b,n) na następujących przykładach: • ex , [0, 1], n = 5, 10, 15, • x2 sin x, [−1, 1], n = 5, 10, 15.
3
4.2
Rozwiązanie
Dla poszczególnych przykładów zostały wykorzystane skrypty z poprzednich zadań.
4.3
Wyniki oraz interpretacja
Poniżej zostały przedstawione wykresy dla wykonanych obliczeń: • dla e x n = 5
n = 10
4
n = 15
• dla x 2 sin x n = 5
n = 10
5
n = 15
Odchylenie wielomianu interpolacyjnego od funkcji interpolowanej liczony jest wg wzoru:
1 f (n+1) (ξ x ) (x − xi ) (n + 1)! i=0 n
f (x) − p(x) =
Wyniki maksymalnego odchylenia przedstawione w tabeli: dla n = 5 n = 10 n = 15 e e e −3 −8 −13 x f (x) = e 6! ≈ 3.78 · 10 11! ≈ 6.81 · 10 6! ≈ 1.3 · 10 2 ·42 2 ·110 ·273 f (x) = x 2 sin x ≈ 5.64 · 10−3 2 16! ≈ 8.55 · 10−7 6! ≈ 3.73 11! Dla zadanych funkcji funkcja interpolująca dobrze przybliża wartości funkcji interpolowanej. W 6
11
16
6
pierwszym przypadku już dla wielomianu dziesiątego stopnia oszacowanie daje dokładność maszynową. Dla drugiej funkcji dopiero dla n = 15. Eksperymenty jednak pokazują, że dokładność jest większa od oszacowania (ze względu na grube szacowanie).
4.4
Wnioski
Funkcje są dość dobrze przybliżane interpolacją na zadanych przedziałach.
5
Zadanie 5.
5.1
Przedstawienie problemu
Zadanie polegało na przetestowaniu funkcji rysujNnfx(f,a,b,n) na następujących przykładach: • |x|, [−1, 1], n = 5, 10, 15, •
5.2
1 1+x2 , [−5, 5], n =
5, 10, 15.
Rozwiązanie
Dla poszczególnych przykładów zostały wykorzystane skrypty z poprzednich zadań.
5.3
Wyniki oraz interpretacja
• dla |x| n = 5
n = 10
7
n = 15
• dla
1 1+x2
n = 5
8
n = 10
n = 15
9
Odchylenie wielomianu interpolacyjnego od funkcji interpolowanej liczony jest wg wzoru:
1 f (n+1) (ξ x ) (x − xi ) (n + 1)! i=0 n
f (x) − p(x) =
Wyniki maksymalnego odchylenia przedstawione w tabeli: dla n = 5 n = 10 n = 15 f (x) = |x| − − − 1 10 ·101 10 ·3.7·10 10 ·3.63·10 5 8 f (x) = 1+x ≈ 1.4 · 10 ≈ 9.3 · 10 ≈ 1.73 · 1010 6! 11! 16! Dla |x| nie obliczono błędu ze względu na to, że funkcja nie jest różniczkowalna na całym badanym przedziale. 6
11
4
16
7
2
5.4
Wnioski
Mimo, że pewnych miejscach interpolacja dobrze przybliża funkcję (i dla tych miejsc dokładność wzrasta wraz ze zwiększeniem liczby węzłów interpolacji), błąd wraz ze zwiększaniem stopnia wielomianu rośnie, co jest widoczne zwłaszcza w okolicach końców przedziału (tzw. zjawisko Runge’go).
10