function [x,n,flag]=newton(f,f1,x0,toll,nmax)

n=1; flag=0; step=toll+1; x=x0; % settings iniziali

while (step >= toll) & (n < nmax) & (flag == 0) 
   if f1(x(n)) == 0  % problemi: derivata prima nulla!
      flag=1;  return;
   else % calcola iterazione e suo step abs(x(n+1)-x(n))
      s=-f(x(n))/f1(x(n));
      x(n+1)=x(n)+s;
      step=abs(s);
      n=n+1;
    end 
end 

if (n == nmax) & (step >= toll)
     flag = 1; % uscita per troppe iterazioni
end