function [x, delta, its] = secanti2 (F, x1, x2, x, tol, max_its)
%
% function [x, delta, its] = secanti2 (F, x1, x2, x3, tol, max_its)
%
% Metodo delle secanti bidimensionale. F = @(x) [f(x);g(x)], x1, x2 e
% x3 sono i tre punti di partenza (vettori colonna bidimensionali).
% tol e` la tolleranza ([1e-6, 1e-6] di default). max_its e` il numero massimo
% di iterazioni (50 di default). delta e` la stima dell'errore e  its
% il  numero effettivo di iterazioni.
if ((nargin <= 4) || isempty (tol))
   tol = [1e-6, 1e-6];
elseif (isscalar (tol))
  tol = [tol, tol];
end
if (nargin <= 5)
  max_its = 50;
end
DX = [x2(1)-x(1), x1(1)-x(1); x2(2)-x(2), x1(2)-x(2)];
Fx = F(x);
DF = [F(x2)-Fx, F(x1)-Fx];
delta = -DX * (DF\Fx);
its = 1;
while ((norm (delta, inf) > tol(1) * norm (x, inf) + tol(2)) && ...
       (its < max_its))
  x1 = x2;
  x2 = x;
  x = x + delta;
  its = its + 1;
  DX = [x2(1)-x(1), x1(1)-x(1); x2(2)-x(2), x1(2)-x(2)];
  Fx = F(x);
  DF = [F(x2)-Fx, F(x1)-Fx];
  delta = -DX * (DF\Fx);
end
x = x + delta;
delta = norm (delta, inf);
if (delta > tol(1) * norm (x, inf) + tol(2))
  warning('secanti2: tolleranza non raggiunta')
end
%!demo
%! F = @(x) [0.5*sin(x(1)*x(2))-0.25*x(2)/pi-0.5*x(1);...
%!           (1-0.25/pi)*(exp(2*x(1))-exp(1))+exp(1)*x(2)/pi-2*exp(1)*x(1)];
%! x1 = [0;0];
%! x2 = [1;1];
%! x3 = [0.25;3];
%! [x, delta, its] = secanti2 (F, x1, x2, x3)
%!demo
%! F = @(x) [x(1)^2+x(2)^2-1;sin(pi*x(1)/2)+x(2)^3];
%! x1 = [0; 0];
%! x2 = [0; -2];
%! x3 = [2; 0];
%! [x, delta, its] = secanti2 (F, x1, x2, x3)
