function [x,res]=Jacobi(A,b,x0,tol,maxiter)
% JACOBI Resolution de systemes lineaires par methode de Jacobi
%   [x,res]=JACOBI(A,b,x0,tol,maxiter) resout Ax=b par la methode de
%   Jacobi en utilisant x0 pour choix initial. L'algorithme s'arrete
%   quand maxiter operations ont ete effectuees ou que la norme 2 du residu
%   devient plus petite que tol. La variable de sortie res est un vecteur
%   contenant l'historique des normes des residus.

if(nargin <2)
  error('not enough arguments');
end
if(nargin < 5) 
  maxiter=500; 
end
if(nargin <4)
  tol=1e-6;
end
if(nargin <3)
   x0=zeros(size(A,1),1);
end


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

x=x0;

res(1)=norm(b-A*x,inf);

i=1;
while(i<=maxiter & res(i)>tol)
%while(i<=maxiter) % pour regarder le comportement des iterations
x=((E+F)*x+b)./D;
res(i+1)=norm(b-A*x,inf);
i=i+1;
end
