function [x,res] = rilassa(A,b,omega,tol,maxit)
 
%  [x,res] = rilassa(A,b,omega,tol,maxit)
%  
%  Applica il metodo iterativo di rilassamento
%  con parametro omega
%  per risolvere il sistema lineare
%
%  A*x = b


n=length(b);

nb = norm(b);

Z   = (1-omega)*diag(diag(A)) - omega*triu(A,1);

omegab =  omega*b;
Eomega = -omega*tril(A,-1);

x  = zeros(n,1);

it = 1;
res(it) = nb;

while ((res(it) > tol*nb) & (it<=maxit))

   x = Z*x + omegab;

   if (A(1,1)==0),
     error('Metodo di rilassamento non applicabile'),
   end

   x(1) = x(1) / A(1,1);

   for k=2:n

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

      x(k) = (x(k) + Eomega(k,1:k-1)*x(1:k-1)) / A(k,k);
   end

   it = it + 1;

   res(it) = norm(A*x -b);

end

if (res(it) > tol*nb),
   warning('Metodo non convergente oppure numero massimo di iterazioni insufficiente'),
end

