Wstęp teoretyczny
Metoda Newtona – jest jedną z opcji szukana miejsc zerowych funkcji. Opiera się na jej linearyzacji, tj. zastąpieniu funkcji bazowej przez szereg funkcji liniowych, stycznych do jej wykresu. Metoda ta jest szybkozbieżna, p=2 lecz nie zawsze. W każdym przypadku jest zbieżna dla funkcji kwadratowych.
Wzór na linearyzację w punkcie c:
Rozwiązaniem w omawianej metodzie jest miejsce zerowe funkcji liniowej. Jego wyznaczenie wymaga wyznaczenia pochodnej funkcji. Wzór obliczeniowy dla Metody Newtona zamieszczono poniżej.
Aby wyeliminować konieczność liczenia pochodnych zamiast metody Newtona używa się metody siecznych.
Metoda siecznych - w tej metodzie szukania miejsc zerowych zamiast pochodnej pojawia się iloraz różnicowy. Metoda wolniej zbieżna niż Newtona, p=1,618 jednak pewniejsza. Dokładnego przybliżenia nie uzyskamy jedynie wówczas gdy początkowe przybliżenia znajdują się zbyt daleko rzeczywistego pierwiastka.
Wzór obliczeniowy dla metody siecznych:
$$\alpha = x_{n + 1} = x_{n} - \frac{f(x_{n})(x_{n} - x_{n - 1})}{f\left( x_{n} \right) - f(x_{n - 1})}$$
Kod źródłowy programu MatLAB
%Zadanie 3.11 Miejsca zerowe
clc; clear all; close all; format long
f=inline('x.^2-6*x+9');
df=inline('2.*x-6');
a=2; b=4; x=linspace(a,b);
plot(x,f(x))
grid on
% metoda Newtona
xp=3.2; eps0=0.001; mx=30;
[fp,it] = newton(a,b,f,df,xp,eps0,mx,1)
%Obliczenia metodą siecznych
x0=3.2; x1=3.4; delta=0.001; tol=10^-6; max1=30;
[P, it] = sieczne(f, x0, x1, delta, tol, max1)
Zastosowano do obliczeń następujące funkcje:
function [fp,it] = newton(a,b,f,df,xp,eps0,mx,rysuj)
% INPUT
% fun - zadana funkcja
% dfun- zadana pochodna funkcji
% xp - startowy punkt iteracji
% eps - dokladnosc z jaka wyznaczony bedzie punkt staly
% mx - maksymalna liczba iteracji
% OUTPUT
% fp - kolejne przyblizenia pierwiastka
% it - ilosc iteracji do uzyskania zadanej dokladnosci "eps"
xn=xp;
x=linspace(a,b,250);
fun=vectorize(fun);
dfun=vectorize(dfun);
fs=inline('fxn-dfxn*(xn-x)'); fs=vectorize(fs);
r=1;
it=0;
% wymagana liczba iteracji
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';
I TUTAJ TRZEBA COŚ Z TYMI SIECZNYMI ALE KURDE NIE WIEM JAK BO MI NIE IDZIE