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