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
*
*