function [x, its, delta] = newton (f, f1, x0, tol, maxits)
%
% [x, its, delta] = newton (f, f1, x0, tol, maxits)
%
% Metodo di Newton per f a partire da x0. tol e` un vettore
% [tol_r, tol_a] di tolleranze relativa ed assoluta. maxits il numero
% massimo di iterazioni. In uscita, x e` il vettore delle
% approssimazioni, its il numero di iterazioni e delta il vettore
% delle stime dell'errore (con segno).
its = 1;
x(its) = x0;
delta(its) = -f(x(its)) / f1(x(its));
while ((abs (delta) > tol(1) * abs (x(its))) && (its < maxits))
  x(its + 1) = x(its) + delta(its);
  its = its + 1;
  delta(its) = -f(x(its)) / f1(x(its));
end
if (abs (delta(its)) > tol(1) * abs(x(its)) + tol(2))
  warning ('newton: Raggiunto il numero massimo di iterazioni.')
end
%!demo
%! [x, its, delta] = newton (@(x) x^2 - 2, @(x) 2*x, 2, [1e-5, 1e-5], 10);
%! errore = abs (sqrt(2) - x);
%! semilogy(1:its,errore,'o',1:its,abs (delta),'*')
%! legend('errore','delta')
%! xlabel('iterazioni')
%! ylabel('valori assoluti')
%!demo
%! [x, its, delta] = newton (@sin, @cos, 1, [1e-6, 1e-6], 10);
%! errore = abs (x);
%! semilogy(1:its,errore,'o',1:its,abs (delta),'*')
%! axis([0,25,1e-13,10])
%! title('Newton')
%! legend('errore','delta')
%! xlabel('iterazioni')
%! ylabel('valori assoluti')
