function [XX,Niter]=GaussSeidel1(M,B,X,epsilon,k); 

% [XX,Niter]=GaussSeidel1(M,B,X,epsilon,k); 
% Génère (après avoir testé au préalable s'il convergeait) l'algorithme
% itératif de Gauss-Seidel à partir d'une matrice carrée M (réelle ou
% complexe) inversible dont tous les termes diagonaux sont non nuls. Ce
% programme fournit la solution du système de Cramer M*X=B. L'algorithme
% est initié à X et itéré k fois. Cet algorithme converge en particulier si
% M est à diagonale dominante ou si M est réelle symétrique définie
% positive. Le nombre Niter figure le nombre d'itérations nécessaires pour
% que l'erreur entre un itéré et son successeur descende en dessous du
% seuil epsilon. 

[N,N]=size(M); 
T=tril(M);
F=T-M; 
A=T^(-1)*F; 
[r,Niter0] = rayonspectral1(A,rand(N,1),epsilon,k); 
if (r<1)
    XX=X; 
    err=2*epsilon; 
    Niter=0; 
    while (err > epsilon) && (Niter<k)
        XXold=XX; 
        XX=A*XX +T^(-1)*B; 
        err=norm(XX-XXold); 
        Niter=Niter+1;
    end
else 
    XX=X;
    Niter=0; 
    'condition non remplie' 
end

    
