A cura di Giuseppe Ciaburro
Pubblicato il 23/04/2007
Calcola la soluzione X del sistema A*X=B, usando il metodo iterativo di Gauss Seidel
function [xnew,residuo,nit]=gauss_seidel(a,b,tol)
% X=GAUSS_SEIDEL(A,B,TOL): Calcola la soluzione X del sistema
% A*X=B, usando il metodo iterativo di Gauss Seidel
% con tolleranza TOL sul test di arresto
% se TOL viene omessa, sceglie TOL=100*eps
% [X,RESIDUO,NIT]=GAUSS_SEIDEL(A,B,TOL) Calcola la soluzione X del sistema
% A*X=B, il residuo e il numero NIT di iterazioni eseguite
if nargin < 3
tol = eps*100;
end
% Costruisce la matrice triangolare inferiore
m=tril(a);
% Usa B come stima iniziale X0
xold = b; normb=norm(b);
% Stima un tetto al numero massimo di iterazioni
nmax=length(b)^4;
for n = 1:nmax
res = b-a*xold;
xnew = xold + m\ res;
% Test di arresto
res=norm(res);
residuo(n)=res;
diff = norm(xnew-xold);
if res <= tol*normb %| diff<=tol*norm(xold)
nit=n;
return
else
xold = xnew;
end
end
nit=nmax; display('non converge')