% Householderova metoda - svodjenje matrice A u njoj slicnu matricu koja je
% gornje-Hessenbergova ili trodijagonalna (ako je A simetricna)
%
% Poziv funkcije: A=Householder1(A)
%
% Argumenti funkcije:
%   A - matrica dimenzije NxN
%
% Funkcija vraca:
%   A - matrica slicna polaznoj koja je u Gornje-Hessenbergovoj ili
%   trodijagonalnoj formi


function A=Householder1(A)

[m,n]=size(A);
if(m~=n)
    error('Matrica mora biti kvadratna');
end

for i=1:n-2
    x=A((i+1):n,i);
    N=length(x);
    
    sigma=norm(x);
    k=-sigma*sign(x(1));
    beta=inv(sigma*(sigma+abs(x(1))));
    e=[1 zeros(1,N-1)];
    u=x-k*e';
    
    H=eye(N)-beta*u*u';
    
    T=[eye(n-N) zeros(n-N,N); zeros(N,n-N) H];
    
    A=T*A*T;
end