%
% Aplicacao do metodo de Broyden para a resolucao do sistema
% de equacoes nao lineares F(x) = 0.
%
% L. N. Vicente, Setembro de 2004.
%
%
x     = pontoinicial;
F     = Funcao(x);
normF = norm(F);
%
k = 0;
disp('-------------------------------------------------------------------');
disp('                Metodo de Broyden para F(x) = 0                    ');
disp('-------------------------------------------------------------------');
%disp(' Iteracao         x(1)                   x(2)           norma(F(x))');
disp(' Iteracao     |x(1)-x*(1)|           |x(2)-x*(2)|        || x-x* ||');
%disp(' Iteracao     ||s||         ||s-p||     ||s-p||/||s||    || x-x* ||');
    sol     = [ sqrt(2)/2 ; -sqrt(2)/2 ];
    %sol     = [ 0 ; 3 ];
    e(1)    = abs(x(1) - sol(1));
    e(2)    = abs(x(2) - sol(2));
    normsol = norm( x - sol );
disp(sprintf('    %2.0f   %20.16f   %20.16f    %9.4e',k,e(1),e(2),normsol));
%
%A = eye(2);
A = normF*eye(2);
%A = Jacobiana(x);
%A = norm(Jacobiana(x))*eye(2);
%
while (normF > 1e-10)
%  
    s    = - A \ F;
    %p    = - Jacobiana(x) \ F;
    %e(1) = norm(s - p);
    %e(2) = norm(s);
    %e(3) = norm(s - p) / norm(s);
    x    = x + s;
    Fant = F;
    F    = Funcao(x);
    y    = F - Fant;
    A    = A + ( y - A*s ) * s' / (s' * s);   
%
    normF = norm(F);
    k     = k + 1;
%
    e(1)    = abs(x(1) - sol(1));
    e(2)    = abs(x(2) - sol(2));
    normsol = norm( x - sol );
    disp(sprintf('    %2.0f   %20.16f   %20.16f    %9.4e',k,e(1),e(2),normsol));
    %disp(sprintf('    %2.0f     %9.4e    %9.4e    %9.4e    %9.4e',...
    %             k,e(1),e(2),e(3),normsol));
%
end
%
disp('-------------------------------------------------------------------');
%
% Fim.