function [ro,omega] = rilassa_raggio(A)

% [ro,omega] = rilassa_raggio(A)
%
% Calcola il raggio spettrale della
% matrice di iterazione del metodo
% di rilassamento in funzione del
% parametro omega.
%
% A --> matrice dei coefficienti del
%       sistema lineare a cui si 
%       applica il metodo di 
%       rilassamento


[n,m]=size(A);

omega=[0:.01:2];

D = diag(diag(A)); F = -triu(A,1); E = -tril(A,-1);

for i = 1:length(omega)

    H = (1-omega(i))*D + omega(i)*F;

    for j=1:n
      
      if (D(1,1)==0), 
           error('Metodo di rilassamento non applicabile')
      end  
     
      H(1,j) = H(1,j)/D(1,1);

      for k=2:n

        if (D(k,k)==0), 
           error('Metodo di rilassamento non applicabile')
        end  

        H(k,j) = H(k,j) + omega(i)*E(k,1:k-1)*H(1:k-1,j);
        H(k,j) = H(k,j) / D(k,k);

      end
     
    end

%   eig(H) calcola gli autovalori di H
    aut   = eig(H);
%   calcola il raggio spettrale di H, ovvero il massimo modulo
%   degli autovalori di H.
    ro(i) = max(abs(aut));
%   La istruzione abs di Matlab applicata ad un numero complesso
%   restituisce il suo modulo

end