Rozdziaª 13 Przykªadowe projekty zaliczeniowe W tej cz ±ci skryptu przedstawimy przykªady projektów na zaliczenia zaj z laboratorium komputerowego z matematyki obliczeniowej. Projekty mo»na potraktowa jako trudniejsze zadania laboratoryjne. Niektóre projekty s proste je±li chodzi o stron programistyczn. W przypadku wi kszo±ci takich projektów gªówn cz ±ci jest przetestowanie danej metody. Inne projekty mog polega na zaimplementowaniu bardziej skomplikowanej metody z wykorzystaniem ró»nych funkcji octave'a. 64
Interpolacja wielomianowa. Algorytm ró»nic dzielonych. 1. Zaprogramuj w octave funkcje obliczaj c warto±ci wielomianu zadanego w bazie Newtona dla danych w zªów zmodykowanym algorytmem Hornera dla danej tablicy punktów. Parametrami maj by : x tablica punktów - wektor dªugo±ci N z w zªami bazy Newtona, a wektor dªugo±ci N + 1 ze wspóªczynnikami wielomianu w bazie Newtona, N - stopie«wielomianu (mo»na opcjonalnie obliczy N z wektora wspóªczynników). Funkcja zwraca y tablice warto±ci wielomianu w punktach x. 2. Zaprogramuj funkcj obliczaj c ró»nice dzielone dla danych N + 1 w zªów i warto±ci funkcji w tych w zªach algorytmem ró»nic dzielonych (jak z tabelki ró»nic dzielonych). Parametry funkcji to: x wektor dªugo±ci N + 1 z ró»nymi w zªami y wektor dªugo±ci N + 1 z warto±ciami funkcji f w w zªach. Funkcja powinna zwróci wektor rd z ró»nicami dzielonymi rd(k) = f[x 0,..., x k ] dla k = 0,..., N. Czy mo»na to zrobi za pomoc tylko jednej p tli w octavie? 3. Testy: Interpolacja funkcji f(x) = sin(x) i g(x) = sin(4 x) na [ π, 2π] dla w zªów równoodlegªych i Czebyszewa. Porównanie algorytmu ró»nic dzielonych z algorytmem z funkcji octave'a polyt. Znajd¹ wielomiany interpolacyjne w w zªach Czebyszewa i równoodlegªych stopnia N dla N = 4, 8, 16, 32, 64 w bazie Newtona za pomoc funkcji z projektu i za pomoc funkcji polyt octave'a w bazie pot gowej. Oblicz dyskretn norm maksimum (na 1000 punktach) mi dzy wielomianem w bazie Newtona uzyskanym wªasn funkcj, a jej wielomianem interpolacyjnym uzyskanym polyt. Czy ró»nice s pomijalne? Bª d interpolacji 65
Oblicz dyskretn norm maksimum (na 1000 punktach) mi dzy funkcj, a jej wielomianem interpolacyjnym otrzymanym za pomoc funkcji z projektu dla N = 4, 8, 16, 32, 64. Narysuj wykresy funkcji i wykres jej wielomianu interpolacyjnego (na jednym rysunku). Warto± wielomianu w bazie Newtona obliczamy algorytmem Hornera z pierwszego podpunktu. 66
Równania nieliniowe. Metoda Steensena Zaprogramuj funkcj octave'a z metod Steensena zdeniowan wzorem x n+1 = x n - która ma znale¹ przybli»enie f(x ) = 0. Napisz funkcj : f(x n ) 2 f(x n + f(x n )) f(x n ) function [ x, i t ]= s t e f (FCN, x0 ) w m-pliku steff.m z parametrami: FCN - 'wska¹nik' do funkcji (function handle) obliczaj cej warto± f(x) dla danego argumentu x, x0 - liczba, przybli»enie startowe. Funkcja powinna zwraca x obliczone przybli»enie pierwiastka, it - ilo± iteracji. Funkcja powinna si zatrzyma, drukuj c komunikat o braku zbie»no±ci na ekranie komputera, gdy ilo± iteracji przekroczy 100. W przypadku przekroczenia ilo±ci iteracji funkcja ma zwróci komunikat o tym na ekran. Przetestuj metod Steensena z wykorzystaniem funkcji ste () na przykªadach równa«rozpatrywanych w zadaniach w Ÿ 8. W szczególno±ci nale»y sprawdzi, czy metoda zbiega kwadratowo lokalnie, o ile f (x ) 0 dla konkretnej funkcji f(x) = x 3 27. 67
Równania nieliniowe. Metoda Halleya Zaprogramuj funkcj octave'a z metod Halleya, która jest metod Newtona zastosowan do funkcji g(x) := f(x) f (x), która ma znale¹ przybli»enie f(x ) = 0. Wyprowad¹ wzór na kolejn iteracj metody Halleya, w którym b dziemy potrzebowa odwoªania tylko do warto±ci f, f i f. Napisz funkcj z metod Halleya 1 : function [ x, i t ]= h a l l e y (FCN,DFCN, D2FCN, x0 ) w m-pliku halley.m z parametrami: FCN - 'wska¹nik' do funkcji (function handle) obliczaj cej warto± f(x) dla danego argumentu x, DFCN - 'wska¹nik' do funkcji (function handle) obliczaj cej warto± pochodnej f (x) dla danego argumentu x, D2FCN - 'wska¹nik' do funkcji (function handle) obliczaj cej warto± drugiej pochodnej f (x) dla danego argumentu x, x0 - liczba, przybli»enie startowe. Funkcja powinna zwraca x obliczone przybli»enie pierwiastka, it - ilo± iteracji. Jako warunek stopu nale»y przyj warunek speªnienie, którego± z warunków f(x n ) < 10 7 lub x n+1 x n < 10 10. Funkcja powinna si zatrzyma, drukuj c komunikat o braku zbie»no±ci na ekranie komputera, gdy ilo± iteracji przekroczy 100. W przypadku przekroczenia ilo±ci iteracji funkcja ma zwróci komunikat o tym na ekran. Przetestuj metod Halleya z wykorzystaniem funkcji halley() na przykªadach równa«rozpatrywanych w zadaniach w Ÿ 8. W szczególno±ci nale»y sprawdzi, czy metoda zbiega kubicznie lokalnie, o ile f (x ) 0 dla f(x) = x 2 4 dla x = 2. 1 Tak, tego Halleya od komety Halleya. 68
Równania nieliniowe. Rozwikªywanie funkcji. Rozpatrzmy dan krzyw okre±lon równaniem f(x, y) = 0, gdzie funkcja f(x, y) jest okre±lona na prostok cie [a, b] [c, d]. Chcemy znale¹ przybli»one warto±ci funkcji y(x) zadanej w sposób uwikªany przez f(x, y(x)) = 0 w punktach x k = a + k h dla h = (b a)/n, znaj c dobre przybli»enie y(x 0 ) = y(a) = y0. Tutaj N - to ustalona liczba naturalna. Napisz funkcj (w m-pliku) octave'a, która dla danych parametrów FCN wska¹nika do funkcji dwóch argumentów f(x, y), ustalonych a, b - ko«ców odcinka y0 b d cego przybli»eniem y 0 N ilo±ci punktów, w których chcemy znale¹ przybli»enie y k y(x k ) - ten parametr mo»e by opcjonalny. Je±li nie zostanie podany to powinien przyjmowa domy±ln warto± sto. Funkcja powinna zwróci jako wektor y k = y(x k ) dla k = 0,..., N. W ka»dym kroku trzeba rozwi za, u»ywaj c funkcji octave'a fsolve ()), równanie nieliniowe: g(y k ) = f(x k, y k ) = 0 bior c za startowe przybli»enie y k 1 (obliczone w poprzednim kroku dla k 1). Je±li si oka»e,»e fsolve() nie potra rozwikªa funkcji powinien na ekranie pojawi si komunikat o bª dzie. Testowa na dwóch przykªadach: Fragment elipsy: f(x, y) = 2 x x + y y 4. Interesuje nas tu y(x) na [ 1.5, 1.5] na siatce 101 punktowej. Za y0 mo»emy wzi y0 = 1 g(x, y) = x 3 + y 3 4 na [0, 1] [0, 1]. 69
Metoda Householdera. LZNK Zaªó»my,»e w wyniku do±wiadczenia otrzymujemy m punktów (x k, y k ), które powinny le»e na jednej prostej, ale w wyniku bª dów pomiaru le» tylko blisko prostej. Chcemy wyznaczy prost y = ax + b, która le»y najbli»ej tych punktów w sensie najmniejszych kwadratów, tzn. takie a, b,»e suma m ax k + b y k 2 k=1 jest minimalna. To zadanie mo»emy przedstawi jako odpowiednie regularne LZNK. Je±li istniej dwa punkty o ró»nych odci tych, to LZNK ma jednoznaczne rozwi zanie. Celem projektu jest zaprogramowanie funkcji rozwi zuj cej problem znalezienia wspóªczynników prostej y = ax + b najlepiej przybli»aj cej dane punkty (x k, y k ) k = 1,..., m za pomoc rozkª du QR macierzy przy pomocy metody Householdera. Tzn. szukamy (a, b) takich,»e m k=1 ax k + b y k 2 = min â,ˆb m âx k + ˆb y k 2. Czyli: w funkcji rozwi zujemy LZNK A [a; b] y z macierz dla wektorów i wektora prawej strony A = [ x, 1] k=1 1 1 = 1., 1 x 1 x 2 x =. x m y = y 1 y 2. y m. Jako parametry wej±ciowe funkcji traktujemy wektory x, y dªugo±ci m, funkcja powinna zwraca : 70
wektor [a; b] z rozwi zaniem tego LZNK, macierz A z LZNK macierz górnotrójk tn R wymiaru 2 2 z rozkªadu QR macierzy A metod Householdera, tzn. A = Q [R; 0], dwukolumnow macierz B = [ h 1, h 2 ] wymiaru m 2 - w której odpowiednie kolumny to wektory Householdera h k k = 1, 2 dla macierzy Householdera H k takich,»e H 1 H 2 = Q. Je±li kolumny macierzy A oka» si zale»ne liniowo - funkcja ma zwróci odpowiedni komunikat na ekran. Testy: 1. Przetestuj dla dwóch ró»nych punktów z ró»nymi x k - czy znajdzie prost przechodz c przez te punkty. 2. Przetestuj dla punktów le» cych na prostej: tzn. wygeneruj kilka ró»- nych losowych punktów x k i przyjmij y k = 2 x k 10. Nast pnie sprawd¹, czy funkcja zwróci a = 2, b = 10. 3. Przetestuj dla punktów le» cych blisko danej prostej: tzn. przyjmij np. x k = k/m dla k = 1,..., m dla ró»nych m > 1 z y k = x k + 2 + ɛ k dla ɛ k losowego z przedziaªu [ 10 3, 10 3 ] (funkcja octave'a rand() zwraca losowe punkty z przedziaªu [0, 1]). 4. Sprawd¹, czy rzeczywi±cie dla otrzymanych wektorów Householdera i macierzy R, A zachodzi A = H 1 H 2 [R; 0], np. dla przykªadów z poprzednich podpunktów. W tym celu mo»na stworzy macierze H k i [R; 0] i te trzy macierze wymno»y. 71