LOBPCG solves Hermitian partial eigenproblems using preconditioning
[blockVectorX,lambda]=lobpcg(blockVectorX,operatorA)
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
opts.issym=1;opts.isreal=1;K=size(blockVectorX,2);[blockVectorX,lambda]=eigs(operatorA,K,'SA',opts);
for real symmetric operator operatorA, or
K=size(blockVectorX,2);[blockVectorX,lambda]=eigs(operatorA,K,'SR');
for Hermitian operator operatorA.
blockVectorX must be full rank. blockVectorX can be sparse.
[blockVectorX,lambda,failureFlag]=lobpcg(blockVectorX,operatorA) lso returns a convergence flag.
If failureFlag is 0 then all the eigenvalues converged; otherwise not all converged.
[blockVectorX,lambda,failureFlag,lambdaHistory,residualNormsHistory]=...
lobpcg(blockVectorX,'operatorA','operatorB','operatorT',blockVectorY,...
residualTolerance,maxIterations,verbosityLevel);
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 operatorA and operatorB, thus, e.g., it preserves the sparsity and the structure of operatorA and operatorB.
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://epubs.siam.org/sam-bin/getfile/SISC/articles/36612.pd
The main distribution site http://www-math.cudenver.edu/~aknyazev/software/CG/ also has a C stand-alone, Hypre, and PETSc versions of the code for highly parallel computations. |