Przykładowe projekty zaliczeniowe
Transkrypt
Przykładowe projekty zaliczeniowe
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 [x0 , . . . , xk ] 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¡ xn+1 = xn − Steensena zdeniowan¡ wzorem f (xn )2 f (xn + f (xn )) − f (xn ) - która ma znale¹¢ przybli»enie f (x∗ ) = 0. Napisz funkcj¦: 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 0 (x∗ ) 6= 0 dla konkretnej funkcji f (x) = x3 − 27. 67 Równania nieliniowe. Metoda Halleya Zaprogramuj funkcj¦ octave'a z tona zastosowan¡ do funkcji metod¡ Halleya, która jest metod¡ New- f (x) g(x) := p , |f 0 (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 0 i f 00 . 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 0 (x) dla danego argumentu x, • D2FCN - 'wska¹nik' do funkcji (function handle) obliczaj¡cej warto±¢ drugiej pochodnej f 00 (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 (xn )| < 10−7 lub |xn+1 − xn | < 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 0 (x∗ ) 6= 0 dla f (x) = x2 − 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 xk = a + k ∗ h dla h = (b − a)/N , znaj¡c dobre przybli»enie y(x0 ) = 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 y0 N ilo±ci punktów, w których chcemy znale¹¢ przybli»enie yk ≈ y(xk ) - ten parametr mo»e by¢ opcjonalny. Je±li nie zostanie podany to powinien przyjmowa¢ domy±ln¡ warto±¢ sto. Funkcja powinna zwróci¢ jako wektor yk = y(xk ) dla k = 0, . . . , N . W ka»dym kroku trzeba rozwi¡za¢, u»ywaj¡c funkcji octave'a fsolve ()), równanie nieliniowe: g(yk ) = f (xk , yk ) = 0 bior¡c za startowe przybli»enie yk−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) = x3 + y 3 − 4 na [0, 1] × [0, 1]. 69 Metoda Householdera. LZNK Zaªó»my, »e w wyniku do±wiadczenia otrzymujemy m punktów (xk , yk ), 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 X |axk + b − yk |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 (xk , yk ) k = 1, . . . , m za pomoc¡ rozkª¡du QR macierzy przy pomocy metody Householdera. Tzn. szukamy (a, b) takich, »e m X 2 |axk + b − yk | = min â,b̂ k=1 m X |âxk + b̂ − yk |2 . k=1 Czyli: w funkcji rozwi¡zujemy LZNK A ∗ [a; b] ≈ ~y z macierz¡ A = [~x, ~1] dla wektorów i wektora prawej strony 1 1 ~1 = .. , . 1 x1 x2 ~x = .. . xm y1 y2 ~y = .. . . ym 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 = [~h1 , ~h2 ] wymiaru m × 2 - w której odpowiednie kolumny to wektory Householdera ~hk k = 1, 2 dla macierzy Householdera Hk takich, »e H1 ∗ H2 = 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 xk - 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 xk i przyjmij yk = 2 ∗ xk − 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. xk = k/m dla k = 1, . . . , m dla ró»nych m > 1 z yk = xk + 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 = H1 ∗ H2 ∗ [R; 0], np. dla przykªadów z poprzednich podpunktów. W tym celu mo»na stworzy¢ macierze Hk i [R; 0] i te trzy macierze wymno»y¢. 71