AB-GMRES iterative solver
x=splspc_gmresab(A, b) x=splspc_gmresab(A, b, restart) x=splspc_gmresab(A, b, restart, maxiter) x=splspc_gmresab(A, b, restart, maxiter, tol) [x, nbiter]= splsc_gmresab(...) [x, nbiter, res]= splsc_gmresab(...) [x, nbiter, res, result]= splsc_gmresab(...) [x, nbiter, res, result, itertime]= splsc_gmresab(...)
sparse matrix (size m x n) : the matrix A in the least square problem min(b-Ax)
matrix of double (size m x 1) : the vector b in the least square problem min(b-Ax)
matrix of integer (size 1 x 1) : the number of iterations before restarting the algorithm (default = min(m,n))
matrix of integer (size 1 x 1) : the maximum number of iterations in the algorithm (default = min(m,n))
matrix of integer (size 1 x 1) : the threshold of tolerance for stopping the algorithm (default = 1.e-6)
matrix of double (size n x 1) : solution vector x in the least square problem min(b-Ax)
matrix of integer (size 1 x 1) : total number of necessary iterations to find the solution vector
matrix of double (size 1 x 1) : norm of the computed residual r=A^(T)b-A^(T)Ax
matrix of integer (size 1 x 1) : 0 if the solution is reached, 1 otherwise
matrix of double (size 1 x 1) : computation time for the iterative method
This function solves the sparse linear least squares problem min |Ax-b|, with the AB-GMRES method.
Any optional argument equal to the empty matrix [] is replaced by its default value.
The GMRES method consist in solving the least square problem min(b-Ax), for A square matrix. But when A is not square, GMRES can't be directly used and need to be slightly modified.
The AB-GMRES method consist in solving the least square problem min(b-ABx), ie finding x such as the norm of b-ABx is minimal. This method is mainly useful for underdetermined problems, ie m < n for A of size m x n, because the matrix obtained by doing the product of B and A is of size m x m.
Used without a given preconditioner, the method is simply applied with B=A^(T).
Restart can be used to save memory but is not adviced in this case. The initial vector x0 for the iterative process has been set up to a vector of zeros.
path = fullfile(splspc_getpath(),"tests","matrices"); filename=fullfile(path,"illc1033.mtx"); A = mmread(filename); A = A'; e = ones(size(A,2),1); b = A * e; // With default settings x=splspc_gmresab(A,b); norm(A*x-b)/norm(b) // Configure the options restart=1000; max_iter=3000; tol=1.e-6; [x,nbiter,resid,result,itertime]=splspc_gmresab(A,b,restart,max_iter,tol); // Configure only max_iter x=splspc_gmresab(A,b,[],max_iter);
1994 - 2008 - Sparselib++ v1.7 - R. Pozo, K. Remington, and A. Lumsdaine
2010 - National Institute of Informatics - K. Hayami, T. Ito and J.-F. Yin
2011 - DIGITEO - Michael Baudin
2011 - National Institute of Informatics - Benoit Goepfert