LABORATORIUM
METODY NUMERYCZNE
Miejsca zerowe - metoda siecznych
Prowadzący: dr inż. Tomasz Kozłowski
Karolina Żegiestowska
187230
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
i |
0 | 1 |
---|---|---|
pi |
−1 |
3 |
f(pi) |
0,93 | 8, 38 |
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)} = - 1,498$$
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,992$$
Kolejne przybliżenia wykonano analogicznie:
i | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
pi |
-1 | 3 | -1,498 | -2,992 | -0,998 |
f(pi) |
0,93 | 8,38 | 2,09 | 8,338 | 0,928 |
Kod źródłowy
clc; clear all; close all; format short
%% Dane
x0=-1; x1=3; delta=0.001; tol=0.0001; max1=30;
xi=linspace(-1,3,1000);
f=inline('x.^2-4*x.*sin(x)+4*sin(x).*sin(x)');
yi=f(xi);
%% Metoda 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,'or')
legend('funkcja','przybliżenia miejsca zerowego')
grid on
function [P, it] = sieczne(f, x0, x1, delta, tol, max1)
% INPUT
% f - iterowana funkcja
% x0 - pierwszy punkt startowy
% x1 - drugi punkt startowy
% delta - dokładnosc wyznaczenia miejsca zerowego
% tol - dokladnosc iteracji wartości funkcji
% max1 - maksymalna liczba iteracji
% OUTPUT
% P - wektor kolejnych wartości punktow {pk}
% it - wartosc funkcji g(x) w kolejnych przyblizeniach
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';
Kolejne przybliżenia {pk}
P =
-1.0000
3.0000
-1.2696
-1.5206
-1.8331
-1.8470
-1.8692
-1.8788
-1.8854
-1.8892
-1.8917
Ilość iteracji
it =
9
Wyniki obliczeń