function [x,res] = jacobi(A,b,tol,maxit)
 
%  [x,res] = jacobi(A,b,tol,maxit)
%  
%  Applica il metodo iterativo di Jacobi 
%  per risolvere il sistema lineare
%
%  A*x = b




n=length(b);

d = diag(A);

for i = 1:n
  if (d(i)==0),
     error('Metodo di Jacobi non applicabile')
  end
end

EF = -tril(A,-1) - triu(A,1);

x       = zeros(n,1);
nb = norm(b);

it      = 1;
res(it) = nb;

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

   x = EF*x + b;

   x = x./d;

   it = it + 1;

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

end

if (res(it) > tol*nb),

   warning('Il metodo non e'' andato a convergenza'),

end

