function [res,sol] = CG (A, rhs, x0, m, tol) %%-------------------------------------------------- % CG (A, x, rhs, m, tol) % x0 = initial guess on entry -- % rhs = rhs, m = number of steps % m = max number of steps % tol = tolerance % res = residuals.. % sol = app sol on return %%-------------------------------------------------- sol = x0; r = rhs - A * sol; p = r ; ro1 = r' * r; res(1) = sqrt(ro1) ; tol1 = tol*tol*ro1; % j = 0; while (j < m & ro1 > tol1) j = j+1; ro = ro1; ap = A * p; alp = ro / ( p'*ap ) ; sol = sol + alp * p ; r = r - alp * ap; ro1= r'*r; res(j+1) = sqrt(ro1) ; bet = ro1 / ro ; p = r + bet * p; end end