function [x, k] = gausseidel(A, b, tol, N, x0) precision = 1e-10; n = size(A,1); x = zeros(n, 1); xk = zeros(n, 1); tolerance = 0; x = x0; test = 0; for i = 1:n if abs(A(i,i)) < precision then error("Coefficient diagonaux trop petit.") end end for k = 1:N for i = 1:n sommeTermesPrec = A(i,1:i-1) * x(1:i-1) sommeTermesSuiv = A(i,i+1:n) * x(i+1:n) // Pour avoir une matrice nulle à la place d'une matrice vide // Sur Scilab 6.0+ if (sommeTermesPrec == []) then sommeTermesPrec = [0] end if (sommeTermesSuiv == []) then sommeTermesSuiv = [0] end xk = x; x(i) = (b(i) - sommeTermesPrec - sommeTermesSuiv) / A(i,i); end tolerance = norm(x - xk) / norm(x) if tolerance < tol then // On est rentré dans le test test = 1; break; end end if (test == 0) then error("Pas de convergence en Nmax itérations.") end endfunction