Wykład 8: Analiza numeryczna 1 Zadanie: rozwiązać
Transkrypt
Wykład 8: Analiza numeryczna 1 Zadanie: rozwiązać
Adam Szustalewicz Matematyka obliczeniowa 2012 Wykład 8: Analiza numeryczna skalarne równanie (nieliniowe) 1 Zadanie: W.8 28.03.2012 Rozwiązujemy f (x) = 0 lub układ równań F⃗ (⃗x) = ⃗0 rozwiązać równanie ... mówimy o • równaniu skalarnym • układzie równań f (x) = 0 dla f : R ⊇ D → R , lub o f1 (x1 , x2 , . . . xn ) = 0 ... krótko: (1) F⃗ (⃗x) = ⃗0 dla F⃗ : Rn ⊇ D → Rn . fn (x1 , x2 , . . . xn ) = 0 1. Równania skalarne, szukanie zer funkcji szukamy zer wielomianu x4 − 1 = 0 – mogą to być liczby rzeczywiste lub zespolone, x − sin x = 0 , 0.01x − sin x = 0 , x − cos x = 0 . ] [ ] [ 2 0 x1 − x2 + a ⃗ = 2. Układ dwóch parabol z parametrem a F (⃗x) ≡ 0 x22 − x1 + a (a) (b) (c) (d) • • • • dla dla dla dla a = 1 układ nie posiada rozwiązań, a = 0.25 układ posiada dokładnie jedno rozwiązanie x1 = x2 = 0.5 , a = 0 układ posiada dwa rozwiązania x1 = x2 = 0 , x1 = x2 = 1 , a = −1 układ posiada cztery rozwiązania √ √ x1 = −1 , x2 = 0 , x1 = 0 , x2 = −1 , x1 = x2 = 12 (1 + 5) , x1 = x2 = 12 (1 − 5) . 0 a11 x1 + a12 x2 + . . . + a1n xn − b1 = ... , ... (A⃗x = ⃗b) 3. Układ równań liniowych F⃗ (⃗x) ≡ 0 am1 x1 + am2 x2 + . . . + amn xn − bm można rozważać również macierz prostokątną... 2 Sformułowanie teoretyczne zagadnienia Oznaczmy przez ξ⃗ szukane rozwiązanie układu (1). Czy to rozwiązanie istnieje? Czy jest jednoznaczne? Na ogół korzystamy z metod iteracyjnych (są metody jednopunktowe, wielopunktowe, stacjonarne, niestacjonarne...). Obieramy punkt startowy ⃗x(0) i dla k ≥ 0 konstruujemy ciąg przybliżeń ⃗x(k+1) = ϕ(⃗x(k) ). (2) W szczególnych wypadkach potrafimy wyznaczyć ξ⃗ szybko, w niewielkiej liczbie kroków. Problemy: • jak wybrać przybliżenie początkowe ⃗x(0) ? ⃗ → 0 dla k → ∞ ? • jak znaleźć takie odwzorowanie ϕ , aby ||⃗x(k) − ξ|| ⃗ i ||⃗x(k) − ξ|| ⃗ ? • jak szybko ciąg {⃗x(k) } będzie zbiegać, tzn. jaki jest związek pomiędzy ||⃗x(k+1) − ξ|| 3 Podstawowe metody numeryczne 3.1 Metoda połowienia przedziału (bisekcji) Algorytm omówimy na wykładzie. . . 1 Oznaczając en = xn − ξ mówimy, że posiada zbieżność liniową: |en+1 | ≤ 12 |en | . 1 D. otrzymujemy: |en | = (b − a) ∗ 2−n , a o metodzie Kincaid, W. Cheney, analiza numeryczna, w przekładzie i pod redakcją Stefana Paszkowskiego, WNT, Warszawa 2006, str. 66-69 1 Adam Szustalewicz 3.2 Matematyka obliczeniowa 2012 W.8 28.03.2012 Metoda Newtona (stycznych) Wzór xn+1 = xn − f (xn ) f ′ (xn ) można wyprowadzić z rozwinięcia f (ξ) w szereg Taylora biorąc jedynie dwa pierwsze wyrazy szeregu: (0 =) f (ξ) = f (xn ) + f ′ (xn ) f ′′ (θ) (ξ − xn ) + (ξ − xn )2 , 1! 2! gdzie θ należy do przedziału zawierającego punkty xn , ξ. Wygodna jest interpretacja geometryczna wzoru: znając punkt xn prowadzimy styczną do wykresu funkcji w punkcie (xn , f (xn )) (jest to liniowy wielomian interpolacyjny) i nowym przybliżeniem zera funkcji jest (powinien być) punkt przecięcia tej stycznej z osią OX. Z ostatniego wzoru otrzymujemy zależność xn+1 − ξ = xn − f (xn ) f ′′ (θ) − ξ = (ξ − xn )2 f ′ (xn ) 2f ′ (xn ) czyli C = lim n→inf |xn+1 − ξ| f ′′ (ξ) . = |ξ − xn |2 2f ′ (ξ) ′ Udowodniliśmy, źe dla f ∈ C , f (ξ) ̸= 0 błąd en+1 jest proporcjonalny do kwadratu błędu en : 2 en+1 ≈ Ce2n czyli mamy zbieżność kwadratową metody. Metoda nadaje się również do rozwiązywania układów równań nieliniowych; wyprowadzenie wzoru metody jest identyczne, tyle, że w szereg Taylora rozwijamy funkcję wielu zmiennych. 3.3 Metoda siecznych Wzór xn+1 = xn − f (xn )(xn − xn−1 ) f (xn ) − f (xn−1 ) wymaga znajomości dwóch punktów: (xn−1 , f (xn−1 )) oraz (xn , f (xn )) . Na ich podstawie wyznaczana jest sieczna (tzn. liniowy wielomian interpolacyjny), która powinna przeciąć oś OX w √ nowym punkcie xn+1 . Dla f ∈ C 2 , f ′ (ξ) ̸= 0 wykładnik zbieżności metody wynosi p = 12 (1 + 5) ≈ 1.618 , en+1 = Cepn . 4 Przykład Matlabowskiej funkcji fzero.m % testfzero, asz, 06.12.2005 % Higham, str. 139 clc, close all, clear %[c,cc]=fzero(’cos(x)’,[0,2],optimset(’display’,’iter’)) [c,cc]=fzero(’cos(x)’,0.1,optimset(’display’,’iter’)) 1 figure(1) a=-2; b=2; x=linspace(a,b,101); rys=plot(x,cos(x)); 0.8 set(rys,’LineWidth’,3); grid on; hold on; box on line([a b],[0 0],’Color’,’red’,’LineStyle’,’:’,... 0.6 ’LineWidth’,3); 0.4 line([0.1 0.1],[0 cos(0.1)],’Color’,’black’,... ’LineStyle’,’:’,’LineWidth’,3); 0.2 plot(c,cos(c),’ko’,’MarkerSize’,15,... ’MarkerFaceColor’,’r’,’MarkerEdgeColor’,’k’); 0 plot(0.1,0,’bp’,’MarkerSize’,15,... ’MarkerFaceColor’,’b’,’MarkerEdgeColor’,’k’); −0.2 text(0.2,0.08,’x0’,’FontSize’,15); −0.4 text(c+0.2,cos(c)-0.05,’root’,’FontSize’,15); −2 title(’[c,cc] = fzero( ’’cos(x)’’ , 0.1 )’,’FontSize’,15); axis([-2 2 -0.4 1.1]); set (gcf, ’Color’, ’w’) 2 [c,cc] = fzero( ’cos(x)’ , 0.1 ) x0 root −1.5 −1 −0.5 0 0.5 1 1.5 2 Adam Szustalewicz Matematyka obliczeniowa 2012 W.8 28.03.2012 Użytkownicy Matlaba mają do dyspozycji standardową funkcję fzero, szukającą jednego z rozwiązań równania f (x) = 0 . Funkcja ta może wydrukować sprawozdanie z przebiegu poszukiwań. Jest ona dość skomplikowana... Powyżej widzimy skrypt wywołujący funkcję oraz graficzną ilustrację wyniku: 5 z7 − 1 = 0 Fraktal – metoda Newtona dla równania zespolonego % rownanie: z^n-1 = 0 % asz 2006.01.03 clc, clear, close n=7; % l. pierwiaskow z jednosci np=513; % 201 % l. pktow na osiach niter=80; % l. iteracji e=1e-5; % blad (kryterium zbieznosci) xlim = [-2 2]; ylim = [-2 2]; % zakres rysunku x = linspace(xlim(1),xlim(2),np); y = rot90(linspace(ylim(1),ylim(2),np)); ilex=ones(1,np); iley=ones(np,1); ii=i; z=iley*x + ii*y*ilex; % jedn. urojona for i = 0:n-1, p(i+1) = exp(ii*2*pi*i/n); end; % iteracje for j=1:niter, z = ((n-1)*z + z.^(1-n))/n; z7=1 − m. Newtona: 80 iteracji imag(z) 2 end −2 −2 a=zeros(size(z,1),size(z,2)); for i = 1:n, mask = abs(z - p(i)) % kolory kol = [1 0 0; 0 1 0; ilekol = ceil(n/6); mapakol = for i = 1:ilekol, mapakol = colormap(mapakol); % wybrane 2 real(z) < e; a(mask) = i+1; 0 0 1; [0 0 0]; [mapakol; kolory end; 1 0 1; 0 1 1; v = [1; 0.7; 0.5; 0.2]; v(i)*kol]; end; 1 1 0]; figure(1) set(gcf,’Color’,’w’); ha = axes(’Position’,[0.2 0.2 0.7 0.7]); axis([xlim ylim]), b=image(a); % rysunek w kolorach daspect([(ylim(2)-ylim(1))/(xlim(2)-xlim(1)) 1 1]); d=daspect; axis manual, hold on for i = 1:n, plot((real(p(i))-xlim(1))*((np-1)/(xlim(2)-xlim(1)))+1,... (imag(p(i))-ylim(1))*((np-1)/(ylim(2)-ylim(1)))+1,’kp’,’MarkerSize’,8); end; set(ha,’TickLength’,[0 0]) set(ha,’xtick’,[1,np]), set(ha,’XTickLabel’,str2mat(num2str(xlim(1)), num2str(xlim(2)))) set(ha,’ytick’,[1,np]), set(ha,’YTickLabel’,str2mat(num2str(ylim(2)), num2str(ylim(1)))) set(ha,’FontSize’,12,’Box’,’on’); aa=title([’z^7=1 - m. Newtona: ’,... num2str(niter),’ iteracji’],’Color’,’b’,’FontWeight’,’bold’); xlabel(’real(z)’,’color’,’r’,’FontWeight’,’demi’); ylabel(’imag(z)’,’color’,’k’,’FontWeight’,’demi’); 7 7 z =1 − m. Newtona: 80 iteracji z =1 − m. Newtona: 80 iteracji imag(z) 0.75 imag(z) 0.8 0.6 1.8 2 real(z) 0.67 1.89 1.97 real(z) 3 Adam Szustalewicz 6 Matematyka obliczeniowa 2012 W.8 28.03.2012 Organizacja obliczeń - zabezpieczenia (Na wykładzie. . . ) 7 Zadania na ćwiczenia i na pracownię 1. Narysować wykresy parabol z p. 1.2 dla poszczególnych wartości parametru a. Sprawdzić, czy nie ma pomyłki w podanych wartościach rozwiązań? 2. Znaleźć pierwiastek równania x8 − 36x7 + 546x6 − 4536x5 + 22449x4 − 67284x3 + 118124x2 − 109584x + 40320 = 0 w przedziale [5.5, 6.5] . Powtórzyć obliczenia po zmianie współczynnika 36 na 36.001 .2 3. Napisać i sprawdzić skrypt lub funkcję implementującą metodę bisekcji. Sprawdzić poprawność na następujących funkcjach i przedziałach2 a) c) x−1 − tg x x−1 − 2x b) 2−x + ex + 2 cos x − 6 d) x − tg x w [0, π/2] , w [0, 1] , w [1, 3] , w [1, 2] . 4. Przygotować i sprawdzić rekurencyjną wersję algorytmu bisekcji.2 5. Niech metoda bisekcji startuje od przedziału [50, 63] . Ile najwyżej kroków trzeba wykonać, aby otrzymać pierwiastek z błędem względnym nie większym od 10−12 ?3.1 6. Udowodnić, że wzór ( ) 1 a xn+1 = xn + 2 xn jest realizacją metody Newtona zastosowanej do równania x2 − a = 0 . Wykres wielomianu trzeciego stopnia może być punktowo-symetryczny. Wtedy można wybrać taki punkt startowy dla metody Newtona, aby wpadła ona w martwą pętlę jak na rysunku obok. 7. Czy błędy zaokrągleń spowodują, że metoda Newtona uwolni się z martwej pętli po kilkunastu(-set...) iteracjach? 4 3 2 1 0 −1 −2 −3 −4 −2.5 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 2.5 8. Zaprogramować i obejrzeć działanie metody siecznych dla równania x3 − 3x2 − x + 9 = 0 i punktów początkowych: x0 = −2 , x1 = −1 . (Na przykład wydrukować kolejne przybliżenia zera.) 9. Jak zachowa się metoda siecznych, zastosowana do równania (x3 − 3x2 − x + 9)ex = 0 z punktami początkowymi: x0 = −1 , x1 = −2 ? 10. Jak wszyscy dobrze wiemy, Matlab może pracować na liczbach zespolonych... Pobrać z mojej strony skrypt NewtonFraktalWykl.m i zaprogramować metodę Newtona do rozwiązywania równania skalarnego z 4 − 1 = 0 ze zmienną zespoloną. Za tydzień omówię dodatkowe szczegóły z grafiki na płaszczyźnie... 11. (dla chętnych) Należy wyprowadzić wzory na część rzeczywistą i część urojoną funkcji f (x, y) = (x + iy)4 − 1 , a następnie, przyrównując je do zera - rozwiązać otrzymany układ 2 równań metodą Newtona. Wyniki można zilustrować graficznie również w postaci fraktala... 12. Obejrzeć help do funkcji fzero.m i wypróbować jej działanie. 13. Uzupełnienie: Pobrać funkcję PI(n) p. Tomasza Zawartko, lub napisać swój programik. Celem zadania jest otrzymywanie ciągu przybliżeń π na podstawie coraz dłuższych generowań punktów losowych. Drukować przybliżenia np. co 20000 kolejnych generowań. Zgrabne drukowanie wyników otrzymuje się funkcją sprinf podobnie jak w języku C . Opowiem na wykładzie... 14. Uzupełnienie – zadanie poważne: Za pomocą grafiki zlokalizować wstępnie położenie rozwiązań zadania z Instytutu Fizyki (zad. 6.7), dodatkowo dla wartości parametru x = 16.5 , 18 , 19.5 . Następnie, dla wszystkich x-ów wydrukować wszystkie znalezione (jak najdokładniej) rozwiązania y . * 2 D. 4 Kincaid, W. Cheney, str. 71 * *