function [l2,v2,B] = defl_1(A, v1)
% B resulta de A por deflación de su vector propio v1.
%    Calcula el valor propio l2 y  el vector propio v2.
%
 n  = length(A);
 v1 = Housv(v1);
 C  = Houspre(v1,A);
 B  = zeros(n,n);
 for i=1:n
    B(:,i)=Housmvp(v1,C(i,:));
 end
 l1 = B(1,1);
 b  = B(1,2:n);
 B  = B(2:n,2:n);
 [l2,y] = ItInvRayleigh_2(B);
 if l1~=l2
    a  = b*y/(l2-l1);
    v2 = Housmvp(v1,[a;y]);
 else
    v2 = v1;
 end
end

function u = Housv(x)
% Transformación de Householder del vector x.
%
 m = max(abs(x));
 u = x/m;
 if u(1) == 0, su = 1; else su = sign(u(1)); end
 u(1) = u(1)+su*norm(u);
 u    = u/norm(u);
 u    = u(:);
end

function P = Houspre(u, A)
% Producto P = H*A, donde H is una trannformación de Householder
%  definida por el vector u.
%
 n = length(A);
 v = u/norm(u); v = v(:);
 P = zeros(n,n);
 for j=1:n
    aj = A(:,j);
    P(:,j)=aj-2*(v'*aj)*v;
 end
end

function p = Housmvp(u, x)
% Producto p = H*x, donde H es la transformación de Householder 
%  definida por u.
%
 u = u(:); x = x(:);
 v = u/norm(u);
 p = x - 2*(v'*x)*v;
end