lobpcg.m (Scripts) Publisher's description
from Andrew Knyazev
outputs the array of algebraic smallest eigenvalues lambda and
corresponding matrix of orthonormalized eigenvectors blockVectorX of the Hermitian (full or sparse) operator operatorA using input matrix blockVectorX as an initial guess, without preconditioning, somewhat similar to
for real symmetric operator operatorA, or
for Hermitian operator operatorA.
also returns a convergence flag. If failureFlag is 0 then all the eigenvalues converged; otherwise not all converged.
computes smallest eigenvalues lambda and corresponding eigenvectors blockVectorX of the generalized eigenproblem Ax=lambda Bx, where Hermitian operators operatorA and operatorB are given as functions, as well as a preconditioner, operatorT. The operators operatorB and operatorT must be in addition POSITIVE DEFINITE. To compute the largest eigenpairs of operatorA, simply apply the code to operatorA multiplied by -1. The code does not involve ANY matrix factorizations of operratorA and operatorB, thus, e.g., it preserves the sparsity and the structure of operatorA and operatorB.
residualTolerance and maxIterations control tolerance and max number of steps, and verbosityLevel = 0, 1, or 2 controls the amount of printed info. lambdaHistory is a matrix with all iterative lambdas, and residualNormsHistory are matrices of the history of 2-norms of residuals
blockVectorX - initial approximation to eigenvectors, full or sparse matrix n-by-blockSize. blockVectorX must be full rank.
operatorA - the operator of the problem, can be given as a matrix or as an M-file
Optional function input:
operatorB - the second operator, if solving a generalized eigenproblem, can be given as a matrix or as an M-file; by default, or if empty, operatorB=I.
operatorT - preconditioner, must be given by an M-file; by default, operatorT=I.
Optional constraints input:
blockVectorY - a full or sparse n-by-sizeY matrix of constraints, where sizeY < n. The iterations will be performed in the (operatorB-) orthogonal complement of the column-space of blockVectorY. blockVectorY must be full rank.
Optional scalar input parameters:
residualTolerance - tolerance, by default, residualTolerance=n*sqrt(eps)
maxIterations - max number of iterations, by default, maxIterations = min(n,20)
verbosityLevel - either 0 (no info), 1, or 2 (with pictures); by default, verbosityLevel = 0.
Required output: blockVectorX and lambda are computed blockSize eigenpairs, where blockSize=size(blockVectorX,2) for the initial guess blockVectorX if it is full rank.
Optional output: failureFlag, lambdaHistory and residualNormsHistory are described above.
Functions operatorA(blockVectorX), operatorB(blockVectorX) and
operatorT(blockVectorX) must support blockVectorX being a matrix, not just a column vector.Every iteration involves one application of operatorA and operatorB, and one of operatorT.
Main memory requirements: 6 (9 if isempty(operatorB)=0) matrices of the same size as blockVectorX, 2 matrices of the same size as blockVectorY (if present), and two square matrices of the size 3*blockSize.
This main function LOBPCG is a version of the preconditioned conjugate gradient method (Algorithm 5.1) described in
A. V. Knyazev, Toward the Optimal Preconditioned Eigensolver:
Locally Optimal Block Preconditioned Conjugate Gradient Method,
SIAM Journal on Scientific Computing 23 (2001), no. 2, pp. 517-541. http://dx.doi.org/10.1137/S1064827500366124
- an excessively small requested tolerance may result in often restarts and instability. The code is not written to produce an eps-level accuracy! Use common sense.
- the code may be very sensitive to the number of eigenpairs computed, if there is a cluster of eigenvalues not completely included, cf.
operatorA=diag([1 1.99 2:99]);
The main distribution site: http://math.ucdenver.edu/~aknyazev/
A C-version of this code is a part of the http://code.google.com/p/blopex/ package and is directly available, e.g., in PETSc and HYPRE.
License: GNU LGPL ver 2.1 or above
Copyright (c) 2000-2010 A.V. Knyazev, BLOPEX team
$Revision: 4.12 $ $Date: 14-Mar-2010
Tested in MATLAB 6.5-188.8.131.529 and Octave 3.2.3.
System Requirements:MATLAB 7.9 (2009b)
Program Release Status: New Release
Program Install Support: Install and Uninstall