LABORATORIUM
METODY NUMERYCZNE
Miejsca zerowe
Prowadzący: dr inż. Tomasz Kozłowski
Autor: Przemysław Wojciechowski
Treść zadania:
Dana jest funkcja f(x) = (x−2)2. Wyznacz postać wzoru pk = g(pk − 1) z metody siecznych. Startując z punktu p0 = 2, 2 i p1 = 2, 4 wyznacz ręcznie pierwsze trzy przybliżenia miejsca zerowego p1, p2, p3 metodą siecznych. Następnie wyznacz miejsca zerowe funkcji
z dokładnością δ = 0, 001 (max1=30) używając odpowiedniego skryptu Matlaba dla tych punktów. Skomentuj wyniki i dokładność otrzymanych miejsc zerowych. Używając komendy plot zrób wykres funkcji f(x) na zadanym przedziale oraz zaznacz na nim ręcznie graficzną interpretacje metody siecznych. Wydruk wykresu (wraz z kodem) dołącz do sprawozdania.
Wstęp teoretyczny:
W metodzie tej pochodna funkcji f występująca w metodzie Newtona zastępuje sie ilorazem różnicowym postaci:
$$f^{'}\left( x_{n} \right) = \frac{f\left( x_{n} \right) - f\left( x_{n - 1} \right)}{x_{n} - x_{n - 1}}$$
Wynika z tego następujący wzór rekurencyjny:
$x_{n + 1} = x_{n} - f\left( x_{n} \right)\frac{x_{n} - x_{n - 1}}{f\left( x_{n} \right) - f\left( x_{n - 1} \right)}$ n ≥ 1
Jak widać z powyższego wzoru metoda ta potrzebuje dwóch punktów początkowych. Jest ona wolniejsza od metody Newtona, ale za to zawsze sie zbiega.
Przykład obliczeniowy:
Tab.1 Tabela z wartościami punktów
i |
0 | 1 |
---|---|---|
pi |
2, 2 |
2, 4 |
f(pi) |
0,04 | 0, 16 |
Obliczam drugie przybliżenie miejsca zerowego:
$$p_{2} = p_{1} - \frac{f\left( p_{1} \right)\left( p_{1} - p_{0} \right)}{f\left( p_{1} \right) - f\left( p_{0} \right)} = 2,1(3)$$
Obliczam trzecie przybliżenie miejsca zerowego:
$$p_{3} = p_{2} - \frac{f\left( p_{2} \right)\left( p_{2} - p_{1} \right)}{f\left( p_{2} \right) - f\left( p_{1} \right)} = 2,1$$
Kod źródłowy:
clc; clear all; close all; format short
%% Dane
x0=2.2; x1=2.4; delta=0.001; tol=0.0001; max1=30;
xi=linspace(1.5,2.5,1000);
f=inline('(xi-2).^2');
yi=f(xi);
%% Szukanie miejsc zerowych metodą siecznych
[P, it] = sieczne(f, x0, x1, delta, tol, max1);
disp(sprintf('Kolejne przybliżenia {pk}'))
P
disp(sprintf('Ilość iteracji'))
it
%% Rysownie wykresu
yp=f(P);
plot(xi,yi,'k',P,yp,'om')
legend('zadana funkcja','przybliżenia miejsca zerowego')
grid on
Skrypt obliczenia miejsca zerowego metodą siecznych:
function [P, it] = sieczne(f, x0, x1, delta, tol, max1)
r=1; it=0; zero=1;
P(1)=x0;P(2)=x1;
while zero>tol
it=it+1;
x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0));
r=abs(x2-x1);
zero=abs(f(x2));
x0=x1;
x1=x2;
P(it+2)=x2;
if r<tol
break
elseif it==max1
disp('przekroczono maksymalna ilosc iteracji')
break
end
end
P=P';
Wyniki obliczeń:
Tab.2 Wyniki obliczeń
p0 |
p1 |
p2 |
p3 |
p4 |
p5 |
p6 |
p7 |
p8 |
|
---|---|---|---|---|---|---|---|---|---|
Kolejne przybliżenia miejsca zerowego obliczone ręcznie | 2, 2 |
2, 4 |
2.1(3) |
2.1 |
- | - | - | - | - |
Kolejne przybliżenia miejsca zerowego obliczone numerycznie | 2, 2 |
2, 4 |
2, 1(3) |
2.1 |
2.0571 | 2.0364 | 2.0(2) | 2.0138 | 2.0085 |
Wnioski:
Metoda siecznych jest bardzo prostą metodą obliczania miejsc zerowych, błędy zaokrąglania przy tak prostych obliczeniach nie wpływają w znaczący sposób na otrzymane wyniki. Możliwe że przy 20 iteracji ręcznej błąd ten mógłby wzrosnąć i obserwowalibyśmy rozbieżności miedzy obliczeniami numerycznymi a ręcznymi. Jednak przy 3 przybliżeniach nie jesteśmy w stanie tego stwierdzić. Dokładność otrzymanego ostatecznie wyniku wynika
z założonej dokładności w programie Matlab. Gdyby zwiększyć jeszcze dokładność obliczania miejsca zerowego moglibyśmy otrzymać jeszcze dokładniejszą wartość.