function Hausaufgabe7
  A = [1 -1 1; 1 -2 3; 2 -2 -3];
  b = [6; 14; -3]; 
   
  x = meinHouseholder(A,b);
  fprintf('Lösung x=\n\n');
  disp(x)
    
  fprintf('\nProbe: A*x-b = \n\n');
  disp(A*x-b);
end

function f = meinHouseholder(A,b)

[n,m]=size(A);
l = min([n,m]);
if n==m
    l = l-1;
end

for i=1:l
% Spiegelungsvektor bestimmen
  x=[A(i,i)+meinSig(A(i,i))*norm(A(i:n,i),2); A((i+1):n,i)];
% und diesen normieren
  v=x/norm(x,2);
% Spiegelmatrix in eine Einheitsmarix einbetten
  P=[eye(i-1,i-1), zeros(i-1,n-i+1); zeros(n-i+1,i-1), eye(n-i+1,n-i+1)-2*v*v'];
% simultanes Umformen von rechter und linker Seite
  A=P*A;
  b=P*b;
end

% Lösung bestimmen
x = zeros(m,1);
l = min([n,m]);

for i=l:-1:1
  summe=0;
  for j=l:-1:(i+1)
    summe=summe+A(i,j)*x(j);
  end
  x(i)=(b(i)-summe)/A(i,i);
end

f=x;
end

function s = meinSig(x)
  if x >= 0
      s = 1;
  else
      s = -1;
  end
end

% Hausaufgabe7
% Lösung x=
% 
%    1.000000000000004
%   -1.999999999999997
%    3.000000000000000
% 
% 
% Probe: A*x-b = 
% 
%    1.0e-14 *
% 
%    0.177635683940025
%                    0
%                    0