%% 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.

format short
x=1:5;x=x';
H=HhM(x);
y=H*x
norm(y)
norm(x)
H*H-eye(5)

%
%% QR rozklad matice

A=[1 2 3;4 5 6;7 8 10];

% 1. sloupec

x=A(:,1);
H1=HhM(x);
A2=H1*A;
A2(2:end,1)=0

%
% 2. sloupec

x=A2(2:end,2);
Hp=HhM(x);
H2=eye(3);
H2(2:end,2:end)=Hp
R=H2*A2;
R(3:end,2)=0
Q=H1*H2

%
% Matlab:

[Q1,R1]=qr(A)

%

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