function xv = newton(fun,dfun,x0,tol,maxit)

% xv = newton(fun,dfun,x0,tol,maxit)
%
% Implementa il metodo di Newton per il
% calcolo di una radice della equazione 
% non lineare
%
% fun(x) = 0
%
% Input: fun  --> funzione di cui si vuole la radice
%        dfun --> derivata prima di fun
%        x0   --> punto di innesco
%       tol   --> tolleranza per il criterio di arresto
%      maxit  --> numero massimo di iterazioni consentite
%
% Output: xv --> vettore delle approssimazioni successive
%                calcolate durante la applicazione del metodo.
%                L'ultima componente e' la approssimazione
%                che soddisfa il criterio di arresto
               

f   = feval(fun,x0);
df  = feval(dfun,x0);


if (df==0), 
   error('Metodo di Newton non applicabile'), 
end

x = x0 - f/df;

it = 1;
xv(1) = x;

while ((abs(x-x0)>tol)&(it<=maxit))

    x0 = x;   
    f   = feval(fun,x0);
    df  = feval(dfun,x0);

    if (df==0), 
       error('Metodo di Newton non applicabile'),
    end

    x = x0 - f/df;
    it = it + 1;
    xv(it) = x;
end

if (abs(x-x0)>tol),
   error('Il metodo di Newton non converge'),
end
