function [alpha,it,xv,fk]=newton(x0,fun,dfun,toll,nmax)
% Chiamata:
%     [alpha,it,xv,fk]=newton(x0,fun,dfun,toll,nmax)
% Input:
%   x0 : guess iniziale
%   fun: inline function per f(x)
%  dfun: inline function per f'(x)
%  toll: tolleranza
%  nmax: numero max di iterazioni 
% Output:
%   alpha: radice calcolata
%   it:    numero di iterazioni effettuate
%   xv:    elenco delle iterate
%   fk:    valori di f(xv)

it=1;        % contatore di iterazioni
xv = x0;     % valore iniziale
test=2*toll; %cosi` entro nel ciclo!
% ciclo
while (test > toll)&&(it<nmax)
    fk(it)=fun(xv(it));
    df = dfun(xv(it));    
    xv(it+1)=xv(it) - fk(it)/df;
    test = abs(xv(it+1)-xv(it));
    it=it+1;
end
alpha=xv(end);
if (it==nmax)
    disp('Numero max di iterazioni raggiunto')
end
return
