[val1, val2] = function(par1,par2,...)
function [out] = my_gradient(A,P,b,x0,max,tol)
xk=x0;
k =1 ;
while ( ( norm(b - A * xk)./norm(b) >= tol ) && k <= max )
rk = b - A * xk;
yk = P \ rk;
alphak = yk' * (rk) / ((A * yk)' * yk);
xk = xk + alphak * yk;
end
if k == max
warning('Does not convergence in max iteration');
end
out = xk;
end
function [out,rk_hist] = my_gradient(A,P,b,x0,max,tol)
rk_hist
rk_hist = [rk_hist, b-A*xk];
[out,~] = my_gradient(A,P,b,x0,max,tol)
[out,rk_hist] = my_gradient(A,P,b,x0,max,tol);
semilogy(1:numel(rk_hist),rk_hist,'*');
numel
function [out] = my_gradient(A,P,b,x0,max,tol)
xk=x0;
rk=b-A*xk;
zk=P\rk;
k =1 ;
while ( ( norm(b - A * xk)./norm(b) >= tol ) && k <= max )
alphak=dot(rk' * zk)/dot(zk' *A*zk);
xk= xk+ alphak*zk;
rk=rk-alphak*A*zk;
k=k+1;
end
if k == max
warning('Does not convergence in max iteration');
end
out = xk;
end
Torna a Analisi Numerica e Ricerca Operativa
Visitano il forum: Nessuno e 1 ospite