function [x, error, iter] = free(x, b, atv, errtol, maxit, varargin) % free-iteration linear equation solver % function [x, error, total_iters] = free(x0, b, atv, errtol, maxit, varargin) % input parameters: % x initial iterate % b right hand side % atv character name of a matrix-vector product routine returning x+(b-Ax) % when x is input. The format for atv is "function x = atv(x,b,p1,p2,...)" % where p1 and p2 are optional parameters % errtol relative residual reduction factor % maxit maximum number of iterations % varargin optional parameters (p1,p2,...) for atv % output parameters: % x solution of the linear system % error vector of residual norms for the history of the iteration % iter number of iterations % (c) 2007 Alain Hebert, Ecole Polytechnique de Montreal errtol=errtol*norm(b); rho=Inf; error=[ ]; iter=0; while((rho > errtol) && (iter < maxit)) iter=iter+1; r=feval(atv,x,b,varargin{:})-x; rho=norm(r); error=[error;rho]; x=x+r; end