Obliczenia Naukowe i Metody Numeryczne Laboratorium
Transkrypt
Obliczenia Naukowe i Metody Numeryczne Laboratorium
Obliczenia Naukowe i Metody Numeryczne Laboratorium Komputerowe lista 4 – 5 października 2012 Temat: interpolacja i iteracyjne metody obliczania zer funkcji Uwagi. Zalecane jest graficzne ilustrowanie przeprowadzonych eksperymentów numerycznych. Należy zrealizować zadanie obowiązkowe i jedno z zadań do wyboru (interpolacja lub iteracyjne metody). Metody iteracyjne – zadanie obowiązkowe Eksperymentalnie zbadać szybkość zbieżności co najmniej dwóch spośród następujących iteracyjnych metod obliczania zera funkcji f (x): • metoda bisekcji • metoda siecznych xk+1 = xk − • metoda Pegasus if f (k+1 )f (xk ) < 0 if f (xk+1 )f (xk ) > 0 • metoda Illinois if f (k+1 )f (xk ) < 0 if f (xk+1 )f (xk ) > 0 xk − xk−1 f (xk ) f (xk ) − f (xk−1 ) then (xk−1 , f (xk−1 ) is replaced by (xk , f (xk )), f (x )f (x ) k then (xk−1 , f (xk−1 )) is replaced by xk−1 , f (xkk−1 )+f (xk+1 ) , then (xk−1 , f (xk−1 ) is replaced by (xk , f (xk )), then (xk−1 , f (xk−1 )) is replaced by (xk−1 , f (xk−1 )/2), • metoda Steffensena xk+1 = xk − f (xk ) , g(xk ) gdzie g(xk ) = • metoda Newtona xk+1 = xk − f (xk + f (xk )) − f (xk ) f (xk ) f (xk ) f 0 (xk ) • metoda Halleya xk+1 = xk − 1 , ak gdzie ak = f 0 (xk ) 1 f 00 (xk ) − . f (xk ) 2 f 0 (xk ) • modyfikacje metody Newtona: Chcemy obliczyć zero funkcji f (x). Metodę Newtona zamiast do funkcji f stosujemy do pewnej zmodyfikowanej funkcji fˆ, zależnej od f . Na p 0 ˆ przykład dla f (x) = f (x)/ f (x) otrzymamy metodę Halleya (zob. Ben Israel). • metoda Olvera xk+1 = xk − f (x) 1 f (xk )2 f 00 (xk ) − f 0 (x) 2 [f 0 (xk )]3 1 Obliczać: • liczbę wykonanych iteracji iterwyk , • błędy ek = |xk − ξ|, jeśli znane jest dokładne zero ξ funkcji f , oraz xk+1 − xk , f (xk ), |xk+1 − xk |/|xk+1 |. Jeśli liczba iteracji będzie bardzo duża, to wyświetlać tylko niektóre spośród powyższych wielkości - z informacją, w jakiej iteracji one wystąpiły - lub wyniki dla 10 ostatnich iteracji, itp. • Dla metody siecznych dodatkowo obliczać: ek ek−1 , ek+1 /(ek−1 ek ), √ (1+ 5)/2 ek+1 / ek . • Zastosować różne kryteria kończenia procesu iteracyjnego, na przykład: |xk+1 − xk | ¬ δ1 |xk |, |xk+1 − xk | ¬ δ2 , k ¬ itermax , |xk+1 − xk | ¬ δ3 |xk | + δ4 , |f (xk )| ¬ δ5 Przykłady funkcji testowych Uwaga. Obok funkcji jest podany przedział, w którym należy szukać jej zera. Parametr n jest liczbą naturalną. • f (x) = • f (x) = 1 x ∈ [0, 5], x−π , x3 − 2x − 5, x ∈ [0, 3], p • f (x) = sign(x − 2) |x − 2|, • f (x) = x2 − (1 − x)n , • f (x) = (1 + (1 − n)2 )x x ∈ [1, 4], [0, 1], − (1 − nx)2 , [0, 1], • f (x) = ex − 3x2 , zera w pobliżu −0.5 oraz 4 • f (x) = x(x − 3) − 4(sin x)2 , [3, 4] • f (x) = x2 − (1 − x)n , [0, 1], n = 1, 5, 10 • f (x) = (1 + (1 − n)4 )x − (1 − nx)4 , [0, 1], n = 1, 4, 8 • f (x) = (x − 1)exp(−nx) + xn , [0, 1], n = 1, 5, 10 • f (x) = xn + x, [−0.75, 0.5], n = 3, 5, 9, 19 • f (x) = xn + x + 10−4 , [−0.75, 0.5], n = 3, 5, 9, 19 • f (x) = sin x − 0.5, [0, 1.5] • f (x) = 2xexp(−n) + 1 − 2exp(−nx), [0, 1], n = 1, 2, 3, 4 • f (x) = x − exp(−x), [0, 1] • f (x) = sin x, [1, 6], [1, 10] • f (x) = tg(x) − cos(x) − 0.5, [0, 3] • f (x) = xn 2 • f (x) = e1−x − 1 • f (x) = xe−3x • f (x) = x1/3 - x0 6= 0 • Perfidny wielomian Wilkinsona: w(x) = (x − 1)(x − 2) . . . (x − 20). • w(x) = (x − 1)8 = x8 − 36x7 + 546x6 − 4536x5 + 22449x4 − 67284x3 + 118124x2 − 109584x + 40320, [0.99, 1.01], [7.99, 8.01]. • f (x) = arctg(x) Zadania do wyboru – interpolacja 1. Wyznaczać ciąg wielomianów wn (x), stopnia n, interpolujących funkcję f (x) = 1/(1 + 25x2 ) na przedziale [−a, a] z węzłami równoodległymi. Obliczenia wykonać dla n = 1, 2, 3, .... i różnych wartości parametru a. Wielomiany interpolujące wyznaczyć za pomocą wzoru Newtona. Obliczenia powtórzyć dla innych funkcji f , np. dla funkcji f (x) = 1−|x|, f (x) = cos (x). Badać, czy wielomian interpolacyjny wn (x) co raz lepiej przybliża funkcję f , jeśli zwiększamy n. Czy taki sam wniosek otrzymuje się dla wszystkich x z przedziału [−a, a]? Obliczenia powtórzyć dla węzłów Czebyszewa. 2. Zbadać zbieżność wielomianów interpolacyjnych dla następujących funkcji interpolowanych (zob. skrypt Grabarski,...) • f (x) = x + sin (2x), • f (x) = |x|, , x ∈ [−2, 1], x ∈ [−1, 1], • f (x) = 1/(1 + x2 ), x ∈ [−5, 5]. • jakaś inna funkcja. Wybrać węzły równoodległe i węzły Czebyszewa. 3. Zapoznaj się z wzorem interpolacyjnym Newtona dla wielomianu interpolacyjnego z węzłami równoodległymi, w którym stosuje się różnice progresywne (zob. np. Fortuna, Macukow, ..., str. 49 ). Przeprowadź eksperymenty numeryczne, korzystając z tego wzoru i z wzoru Lagrange’a. 4. Wiadomo, że współczynniki wielomianu interpolacyjnego Lagrange’a można wyznaczyć rozwiązując układ równań liniowych z macierzą Vandermonde’a. Zastosuj to do wyznaczenia współczynników wielomianu interpolacyjnego z węzłami interpolacji, na przykład, xj = j dla j = 0, 1, 2, . . . , n. Obliczaj wskaźnik uwarunkowania macierzy Vandermonde’a. Ten sam wielomian interpolacyjny wyznacz inną metodą. Porównaj wartości obu wyznacznych wielomianów interpolacyjnych w jakichś punktach z przedziału zawierającego węzły interpolacji. 5. Wielomian interpolujący wn daną funkcję f w danych węzłach interpolacji xj można przedstawić np. w postaci Lagrange’a i postaci Newtona. Werner zaproponował sposób przejścia od postaci Lagrange’a do postaci Netwona. Zrealizować algorytmy obliczania wartości wielomianu interpolacyjnego podanego w postaci Lagrangre’a oraz zamiany postaci Lagrange’a na postać Newtona. Porównać dokładność wyników uzyskanych za 3 √ pomocą obu wzorów na przykład dla funkcji f (x) = 1 + x2 . Jako węzły interpolacji wybrać 2j + 1 xj = cos π , 0 ¬ j ¬ n. 2(n + 1) Obliczyć błąd f − wn w 19 punktach równoodległych z przedziału [−1, 1] (wystarczy wyznaczyć maksymalny moduł tych różnic). Literatura: W. Werner, Polynomial interpolation: Lagrange versus Newton, Mathematics of Computation, 43 (1984), 205–217. 6. Wielomian interpolacyjny w postaci Lagrange’a można przekształcić do postaci barycentrycznej. Porównać algorytmy obliczania wartości wielomianu interpolacyjnego z wzoru Lagrange’a i z wzoru w postaci barycentrycznej. Eksperymenty numeryczne wykonać podobne jak w innych zadanich. Postać barycentryczna wielomianu interpolacyjnego: wn (x) = n X i=1 n .X ωi ωi f (xi ) , x − xi x − xi i=1 gdzie . ωi = 1 n Y (xi − xj ), x 6= xi (i = 0, . . . , n), i = 0, 1, . . . , n. j=0,j6=i Literatura: Jean-Paul Berrut, L.N. Trefethen, Barycentric Lagrange interpolation, SIAM Review, 2005 (zob. strona domowa Trefethena). 7. Wyznaczyć wielomian interpolujący funkcję f (x) = (1+x2 )−1 na przedziale [−5, 5] w 21 węzłach równoodległych (końce przedziału są węzłami). Porównać wartości wielomianu interpolacyjnego w 41 punktach równoodległych z przedziału [−5, 5] z dokładnymi wartościami funkcji f . To samo wykonać dla węzłów losowo wybranych z przedziału [−5, 5] iπ oraz xi = 5cos 20 (0 ¬ i ¬ 20) i dla xi = 5cos 2i+1 42 π (0 ¬ i ¬ 20). Obliczenia powtórzyć dla innej liczby węzłów. Wielomiany interpolujące wyznaczyć za pomocą wzoru Newtona. Obliczenia powtórzyć na przykład dla funkcji f (x) = |x| i f (x) = max{0, 1 − x} na przedziale [−4, 4]. 8. Wyznaczać ciąg wielomianów wn (x), stopnia n, interpolujących funkcję f (x) = ex na przedziale [0, a] z węzłami równoodległymi. Obliczenia wykonać dla n = 1, 2, 3, .... i różnych wartości parametru a. Wielomiany interpolujące wyznaczyć za pomocą wzoru Newtona, wykorzystując fakt, że węzły są równoodległe. Obliczenia powtórzyć dla innych funkcji f , np. dla funkcji f (x) = x sin πx . Badać, czy wielomian interpolacyjny dobrze przybliża funkcję f . √ √ Testy wykonać też dla funkcji f (x) = arc sin x na przedziale [−1/ 2, 1/ 2]. Zbadać, √jak √ wielomian interpolacyjny przybliża funkcję dla argumentów z przedziału [−1/ 2, 1/ 2]. Dla argumentów spoza tego przedziału skorzystać ze wzoru sin (π/2 − α) = cos α = q 1 − sin2 (x). √ √ Testy wykonać też dla funkcji f (x) = arc sin x na przedziale [−1/ 2, 1/ 2]. Zbadać, √ √jak wielomian interpolacyjny przybliża funkcję dla argumentów z przedziału [−1/ 2, 1/ 2]. 4 Dla argumentów spoza tego przedziału skorzystać ze wzoru sin (π/2 − α) = cos α = q 1 − sin2 (x). 9. Wyznaczyć wielomian p (interpolacja Hermite’a) spełniający warunki: p(xi ) = f (xi ), p0 (xi ) = f 0 (xi ) dla i = 0, 1, . . . , n, gdzie a = x0 < x1 < . . . < xn = b. Zastosować uogólnione ilorazy różnicowe i wzór interpolacyjny Newtona dla węzłów wielokrotnych (zob. podręcznik Kincaida i Cheneya). Obliczenia wykonać dla węzłów równoodległych. Ocenić dokładność, z jaką wielomian interpolacyjny przybliża daną funkcję 10. Wyznaczyć wielomian interpolacyjny Hermite’a dla węzłów Czebyszewa, czyli pierwiastków wielomianu Czebyszewa Tn+1 . W tym przypadku wielomian interpolacyjny ma szczególną postać (zob. Phillips, Taylor, str. 146-147). Obliczenia wykonać m.in. dla funkcji sin πx na przedziale [0, 1]. Ocenić, z jaką dokładnością wielomian interpolacyjny przybliża funkcję. Literatura: G.M. Phillips, P.J. Taylor, Theory and applications of numerical analysis, Academic Press, London 1996. 11. Wiadomo, że funkcja (zob. Cheney, str. 63) f (x) = 1 − tx , 1 − 2tx + t2 |t| < 1, ma następujący szereg Czebyszewa ∞ X 1 − tx tj Tj (x). = 1 − 2tx + t2 j=0 Niech wielomian wn−1 , stopnia ¬ n − 1, interpoluje funkcję f w węzłach interpolacji xi będących pierwiastkami wielomianu Czebyszewa Tn (x). Wówczas (zob. Cheney, str. 135) n−1 X 1 wn−1 (x) = a0 T0 (x) + aj Tj (x), 2 j=1 gdzie aj = n 2X f (xi )Tj (xi ). n i=1 Przeprowadzić eksperymenty numeryczne pokazujące jak wielomian interpolacyjny wn−1 Pn−1 j i suma częściowa szeregu Czebyszewa sn = j=0 t Tj (x) przybliżają funkcję f . Rozważyć dwa przypadki: 0.5 < |t| < 1 i |t| ¬ 0.5. Do obliczania sum częściowych szeregu Czebyszewa zastosować algorytm Clenshawa (zob. Paszkowski, str. 275). Uwaga. Nie stosować procedur podanych w książce Paszkowskiego, tylko napisać własną wersję programu. Literatura: 1. E.W. Cheney, Introduction to approximation theory, McGraw-Hill, New York 1966. 2. S. Paszkowski, Zastosowania numeryczne wielomianów i szeregów Czebyszewa, PWN, Warszawa 1975. 5 Zadania do wyboru – metody iteracyjne 1. Zastosuj metodę bisekcji do wyznaczenia dodatniego rozwiązania równania 2x = arc tg(x). 1 + x2 Obliczone rozwiązanie przyjmij jako przybliżenie początkowe x0 dla metody Newtona zastosowanej do wyznaczenia zera funkcji f (x) = arctg(x). Zinterpretuj wyniki. 2. Wielomian w(x) = 816x3 −3835x2 +6000x−3125 ma trzy pierwiastki rzeczywiste bliskie. Narysuj wykres wielomianu na przedziale [1.43, 1.7]. Zastosuj następujące metody • metod Newtona, x0 = 1.5, • metoda siecznych, x0 = 1, x1 = 2, • metoda bisekcji, początkowy przedział [1, 2], do wyznaczenia jego pierwiastków 3. Wielowymiarowa metoda Newtona służy do rozwiązywania układu równań nieliniowych. Może być zastosowana do wyznaczenia wartości własnej λ i wektora własnego x macierzy A: Ax = λx, x 6= 0. Niech " # Ax − λx f (x, λ) = . xT x − 1 Wówczas wektor x i liczba λ są rozwiązaniem układu równań f (x, λ) = 0, gdy λ jest wartością własną macierzy A, a x odpowiadającym jej wektorem własnym unormowanym. Niech " # Ax − λI −x J(x, λ) = . 2xT 0 J jest macierzą stopnia n + 1, gdzie n jest stopniem macierzy A. Wielowymiarowa metoda iteracyjna Newtona, zastosowana do układu f (x, λ) = 0, ma postać: " xk+1 λk+1 # " = xk λk # " + sk δk # , gdzie jest rozwiązaniem układu równań liniowych " A − λk I −xk 2xTk 0 #" sk δk # " =− Axk − λk xk xTk xk − 1 # . Wobec tego w każdej iteracji trzeba rozwiązywać układ równań liniowych. Napisz program wyznaczający wartość własną i wektor własny metodą Newtona. Dla porównania zastosuj funkcję eig. Jako przybliżenie początkowe wybierz dowolny wektor x0 unormowany, ||x0 ||2 = 1, a za przybliżenie początkowe przyjmij λ0 = xT0 Ax0 . Proces iteracyjny wykonuj tak długo, aż spełniona będzie nierówność ||xk+1 − xk ||2 ¬ . Sprawdzaj też, czy |λk+1 − λk | ¬ . Uwaga. Wektor xk jest k-tym przbliżeniem wektora własnego, a λk jest k-tym przybliżeniem wartości własnej. 6 4. Zbadać wpływ krotności zera funkcji na szybkość zbieżności metody Newtona. Wybrać kilka funkcji testowych, na przykład, f (x) = (x − 1)m . Oliczenia powtórzyć dla zmodyfikowanej metody Newtona xk+1 = xk − m f (xk ) , f 0 (xk ) gdzie m jest znaną krotnością zera. 5. Zastosować iteracyjną metodę Newtona wyznaczania zera funkcji do obliczenia pierwiastków wielomianu ze współczynnikiem 1 przy najwyższej potędze. Wartości wielomianu i jego pochodnej wyznaczać jednocześnie za pomocą odpowiedniej modyfikacji algorytmu Hornera - jest to szczególny przypadek algorytmu Shaw-Trauba (zob. Jankowscy, str. 40, Kincaid, Cheney str. 120-124). Obliczenia wykonywać dla wielomianów o (obl) znanych pierwiastkach. Niech ξ1 będzie obliczonym iteracyjną metodą Newtona przybliżeniem pierwiastka wielomianu w(x). Wykonać deflację wielomianu w(x) czynnikiem (obl) liniowym x − ξ1 i wyznaczyć kolejny pierwiastek wielomianu w(x) stosując iteracyjną (obl) metodę Newtona do wielomianu u(x)/(x−ξ1 ). itd Obliczone w ten sposób pierwiastki wielomianu w porównać z pierwiastkami dokładnymi i obliczonymi za pomocą funkcji roots. Zastosować trzy sposoby wykonywania deflacji wielomianu : algorytm Hornera, odwrotny algorytm Hornera, sklejany algorytm Hornera (zob. Kiełbasiński, Cohen). Zbadać, jak kolejność wyznaczania pierwiastków ma wpływ na ich dokładność 6. Zastosować iteracyjną metodę Newtona (metoda stycznych) wyznaczania zera funkcji do obliczenia pierwiastków wielomianu ze współczynnikiem 1 przy najwyższej potędze. Wartości wielomianu i jego pochodnej wyznaczać jednocześnie za pomocą odpowiedniej modyfikacji algorytmu Hornera - jest to szczególny przypadek algorytmu Shaw-Trauba (zob. Jankowscy, str. 40, Kincaid, Cheney str. 120-124). Obliczenia wykonywać dla (obl) wielomianów o znanych pierwiastkach. Niech ξ1 będzie obliczonym iteracyjną metodą Newtona przybliżeniem pierwiastka wielomianu w(x). Wykonać deflację wielomianu (obl) w(x) czynnikiem liniowym x − ξ1 i wyznaczyć kolejny pierwiastek wielomianu w(x) (obl) stosując iteracyjną metodę Newtona do wielomianu u(x)/(x−ξ1 ). itd Obliczone w ten sposób pierwiastki wielomianu w porównać z pierwiastkami dokładnymi i obliczonymi za pomocą funkcji roots. Zastosować trzy sposoby wykonywania deflacji wielomianu : algorytm Hornera, odwrotny algorytm Hornera, sklejany algorytm Hornera (zob. Kiełbasiński, Cohen). Zbadać, jak kolejność wyznaczania pierwiastków ma wpływ na ich dokładność. 7. Zastosować iteracyjną metodę Bairstowa do wyznaczenia dzielnika kwadratowego wielomianu w(x) ( Niech w(x) = (x2 + px + q)u(x) + ax + b, gdzie a = a(p, q), b = b(p, q). Wiadomo, że macierz pochodnych cząstkowych funkcji a(p, q) i b(p, q) jest nieosobliwa w punkcie (p,q) wtedy i tylko wtedy, gdy wielomiany x2 +px+q i u(x) nie mają wspólnych pierwiastków. W metodzie Bairstowa wyznacza się ciągi p0 , p1 , . . . i q0 , q1 , . . . kolejnych przybliżeń współczynników poszukiwanego dzielnika kwadratowego. Kryterium kończenia procesu 7 iteracyjnego: |pk+1 − pk |2 + |qk+1 − qk |2 ¬ ε(p2k + qk2 ) lub k > kmax , gdzie kmax jest zadaną maksymalną liczbą iteracji, które można wykonać. Testy wykonać m.in. dla wielomianów • w(x) = x4 + 2sx3 + s2 x2 + 1, gdzie s jest dowolnym parametrem. Przbliżenie początkowe x2 + p0 x + q0 dzielinika kwadratowego wybrać tak: p0 = s, q0 = v (v dowolne). • w(x) = (x2 +tx+v)(x2 +tx+s)+(s−v)2 , gdzie t, s, v są dodowlnymi parametrami. Przbliżenie początkowe x2 + p0 x + q0 dzielinika kwadratowego wybrać tak: p0 = t, q0 = v. Chętni studenci oprócz klasycznej wersji metody Bairstowa mogą przetestować jej modyfikację zaproponowaną przez Cohena. Literatura 1. A. Ben-Israel, Newton method with modified functions, Contemporary Math. 24 (1997), 39–50. (praca jest dostępna na stronie domowej Ben-Israela http://rutcor.rutgers.edu/ ˜ bisrael/). 2. W. Cheney, D. Kincaid, Numerical Mathematics and Computing, Brooks/Cole, 1980. 3. A.M. Cohen, Is the polynomial so perfidious?, Numerische Mathematik 68 (1994), 225– 238. 4. Z. Fortuna, B. Macukow, J. Wąsowski, Metody numeryczne, WNT, Warszawa 1998. 5. A. Grabarski, I. Musiał-Walczak, W. Sadkowski, A. Smoktunowicz, J. Wąsowski, Ćwiczenia laboratoryjne z metod numerycznych, praca zbiorowa pod red. J. Wąsowskiego, Oficyna Wyd. Politechniki Warszawskiej, Warszawa 2002. 6. J. i M. Jankowscy, M. Dryja Przegląd metod i algorytmów numerycznych, część 2, WNT, Warszawa 1982. 7. T. Fiała, A. Krebsz, On the convergence and divergence of Bairstow method, Numerische Mathematik 50 (1987), 477–482. 8. A. Kiełbasiński, Zagadnienie deflacji wielomianowej, Matematyka Stosowana III (1974), 93–106. 9. A. Kiełbasiński, H. Schwetlick, Numeryczna algebra liniowa, WNT, Warszawa 1992. 10. D. Kincaid, W. Cheney, Analiza numeryczna, WNT, Warszawa, 2005. 11. E. Stożek, Metody numeryczne w zadaniach, Wyd. Uniw. Łódzkiego, Łódź 1994. Krystyna Ziętak 8