%% Householderova transformace
% Matice Householderovy transformace: H_u=I-2\frac{1}{u^\ast u}uu^\ast
% Pro daný vektor x hledáme vektor u, že H_ux=ce_1: u=x\pm\|x\|e_1, kde znaménko volíme podle znaménka x_1.

x=1:5;x=x';
H=HhM(x);
y=H*x
norm(y)
norm(x)
H*H

%

function H=HhM(x)
% function H=HhM(x)
% Householder matrix such that Hx=ce_1
c=norm(x);
if c==0
    H=Nan;
    return
end
u=x;
if x(1)>0
    u(1)=u(1)+c;
else
    u(1)=u(1)-c;
end
H=eye(length(x))-2/(u'*u)*u*u';
end