function ex15()
diagonalfehler = @(A) sum(sum(abs(A)))/sum(abs(diag(A))) - 1;
              % gibt ein Mass für die "Nicht-Diagonalität" von A zurück

A = [9 6 -5 -2; 6 9 -5 2; -5 -5 7 0; -2 2 0 7];
n = size(A,1);
eps = 1e-4;

%% genaue Lösung
fprintf("Lösung mit Matlab");
[U, D] = eig(A)

%% a.
count = 0;
D = A;
U = eye(n);
while diagonalfehler(D) > eps
  [Q, R] =  qr(D);
  U = U*Q;
  D = R*Q;
  count = count + 1;
end

fprintf("einfaches QR-Verfahren: count = %d", count);
D
U

%% b.
count = 0;
[U,D] = hess(A);
while diagonalfehler(D) > eps
  [Q, R] =  qr(D);
  U = U*Q;
  D = R*Q;
  count = count + 1;
end
fprintf("QR-Verfahren mit Hessenberg: count = %d", count);
D
U

%% c. 
count = 0;
D = A;
U = eye(n);
while diagonalfehler(D) > eps
  sigma = D(n,n);
  [Q, R] =  qr(D - sigma*eye(n,n));
  U = U*Q;
  D = R*Q + sigma*eye(n);
  count = count + 1;
end
fprintf("QR-Verfahren mit Shift: count = %d", count);
D
U
