A cura di Giuseppe Ciaburro
Pubblicato il 17/04/2007
Calcola la soluzione X del sistema A*X=B, usando il metodo iterativo del gradiente
function [xnew,residuo,nit]=gradiente(a,b,tol)
% X=GRADIENTE(A,B,TOL): Calcola la soluzione X del sistema
% A*X=B, usando il metodo iterativo del gradiente
% con tolleranza TOL sul test di arresto
% se TOL viene omessa, sceglie TOL=100*eps
% [X,RESIDUO,NIT]=GRADIENTE(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
% Usa B come stima iniziale X0
xold = b; normb=norm(b);
% Stima un tetto al numero massimo di iterazioni
nmax=length(b)^2; nmax=250
for n = 1:nmax
res = b-a*xold;
ares=a*res;
alpha = (res'*res) / (res'*ares);
xnew = xold + alpha*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')