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