![]() |
(2.6) |
Si può ossevare che questo metodo converge in una sola iterata se la
funzione è del tipo
, infatti
[x,passi]=Newtonmolt(f,df,x0,r,epsilon,upper) -
Applica il
metodo di Newton alla funzione
, la cui derivata è
,
con punto iniziale
, molteplicità della radice r
accuratezza epsilon e numero massimo di passi upper. Restituisce in
la radice (se trovata) e in passi, il numero di passi effettuati.
%NEWTONMOLT
%[x,passi]=Newtonmolt(f,df,x0,r,epsilon,upper)
% Pre: f derivabile
% Applica il metodo di Newton per il calcolo della
% radice (di molteplicita' nota r) dell'equazione f(x)=0
% f - funzione
% df - derivata prima di f
% x0 - punto di innesco
% r - molteplicita' della radice
% epsilon - tolleranza per la radice
% upper - numero massimo di iterazioni consentite
%
% Restituisce in x la radice trovata e in passi il numero
% di iterazioni che sono state necessarie per reggiungerla
% See also BISEZ, CORDE, SECANTI.
function [x,passi]=Newtonmolt(f,df,x0,r,epsilon,upper)
count=0;
f0=feval(f,x0);
d=feval(df,x0);
while(count<upper) & (abs(f0)>abs(epsilon*d))
count=count+1;
d=feval(df,x0);
x0=x0-r*(f0/d);
f0=feval(f,x0);
end
x=x0;
passi=count;
return
function y=fm(x)
y=(x-5)^5;
>> type dfm
function y=dfm(x)
y=5*(x-5)^4;
>> [x,passi]=Newton('fm','dfm',6,1E-5,200)
x =
5.00010633823966
passi =
41
>> [x,passi]=Newtonmolt('fm','dfm',6,5,1E-5,200)
x =
5
passi =
1
Il metodo di accelerazione di Aitken, invece, utilizza questa
approssimazione per l'approssimazione
, note due approssimazioni
precedenti che convergono linearmente,
e
:
In pratica il metodo di accelerazione si utilizza nel seguente modo:
Come si vede dall'esempio, questo metodo è molto efficace nel caso
di radici multiple. Applicandolo alla funzione
trova la
radice con una accuratezza pari a
in 3 passi contro i 134 del
metodo di Newton.
[
,passi]=Aitken(f,df,x0,epsilon,upper) -
Applica il
metodo di Newton con accelerazione di Aitken alla funzione
(la cui
derivata è
)
con punto iniziale
, accuratezza epsilon e numero massimo
di passi upper. Restituisce in
la radice (se trovata) e in passi, il numero di passi effettuati.
%AITKEN %function [x,passi]=Aitken(f,df,x0,epsilon,upper) % % Trova la radice della funzione f con derivata df % applicando il metodo di accelerazione di Aitken % con punto iniziale x0, tolleranza epsilon e numero % massimo di passi upper. % Restituisce in x il valore della radice e in passi % il numero di iterazioni eseguite. function [x,passi]=Aitken(f,df,x0,epsilon,upper) f0=feval(f,x0); d=feval(df,x0); x1=x0-(f0/d); f1=feval(f,x1); d=feval(df,x1); x2=x1-(f1/d); f2=feval(f,x2); count=0; while (count<upper) & abs(f2)>abs(epsilon*d) count=count+1; x0=(x1*x1-x0*x2)/(2*x1-x2-x0); f0=feval(f,x0); d=feval(df,x0); x1=x0-(f0/d); f1=feval(f,x1); d=feval(df,x1); x2=x1-(f1/d); f2=feval(f,x2); end x=x2; passi=count+2; return
>> type fm
y=(x-5)^5;
>> type dfm
function y=dfm(x)
y=5*(x-5)^4;
>> [x,passi]=Newton('fm','dfm',6,1E-14,300)
x =
5.00000000000010
passi =
134
>> [x,passi]=Aitken('fm','dfm',6,1E-14,300)
x =
4.99999999999993
passi =
3
2004-05-29