clear;
% Metodo QR per il calcolo di tutti gli autovalori di una
% matrice data.
%--------------------------------------------------------

A=[30 1 2 3;4 15 -4 -2; -1 0 3 5; -3  5 0 -1];
kmax=100; tol=1.e-3;
[Q,R]=qr(A);
T=Q*R;
% QQ è la matrice contenente il prodotto comulativo
% delle matrici ortogonali Q_k. Ovvero
% QQ=\prod_{k=1}^M Q_k. 
QQ=Q;
k=1;
while convergenzaQR(T,tol)==0 & k <= kmax,
    T1=R*Q;
    [Q,R]=qr(T1);
    QQ=QQ*Q;
    T=Q*R;
   % pause
    k=k+1;
end
disp('Numero iterazioni ' )
k
% 
% Al termine del programma,
% T rappresenta la matrice triangolare superiore 
% avente gli autovalori di A lungo la diagonale.
% Inoltre QQ'*A*QQ=T.

% Verifica
disp('Calcolo del residuo diag(T)-eig(A) ' )
norm(diag(T),2)-norm(eig(A),2)

