Code covered by the BSD License  

Highlights from
lobpcg.m

4.5

4.5 | 2 ratings Rate this file 24 Downloads (last 30 days) File Size: 9.16 KB File ID: #48
image thumbnail

lobpcg.m

by

 

25 May 2000 (Updated )

LOBPCG solves Hermitian partial generalized eigenproblems using preconditioning, competes with eigs

| Watch this File

File Information
Description

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

A C-version of this code is a part of the http://code.google.com/p/blopex/
package and is available, e.g., in SLEPc and HYPRE.

Tested in MATLAB 6.5-7.13 and Octave 3.2.3-3.4.2.

MATLAB release MATLAB 7.13 (R2011b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (7)
25 Jul 2011 Andrew Knyazev

"I encounter some severe differences in memory requirements comparing lobpcg.m with lobpcg from hypre/ij. Is there a way to use hypre with the same requirements as lobpcg.m?"

High memory requirements in hypre/ij in these tests come from hypre BoomerAMG preconditioning, not from the LOBPCG. For my full answer please see my reply at

http://www.mathworks.com/matlabcentral/answers/9534-memory-requirements-of-lobpcg-matlab-and-hypre-implementation-differences

15 Jun 2011 Elias

I encounter some severe differences in memory requirements comparing lobpcg.m with lobpcg from hypre/ij. Is there a way to use hypre with the same requirements as lobpcg.m? For full explanation see

http://www.mathworks.com/matlabcentral/answers/9534-memory-requirements-of-lobpcg-matlab-and-hypre-implementation-differences

08 Jun 2011 Andrew Knyazev

"Is there any reason why LOBPCG might not work for generalized eigenvalue problems with large sparse, symmetric matrices..."

Very slow convergence is an expected normal behavior of lobpcg for such a problem, without preconditioning. For detailed explanations and possible solutions, see

http://www.mathworks.com/matlabcentral/answers/9063-lobpcg-returning-incorrect-results-for-large-sparse-symmetric-matrices

08 Jun 2011 Andrew

Is there any reason why LOBPCG might not work for generalized eigenvalue problems with large sparse, symmetric matrices (size 70 000 x 70 000, with 4.5 million non-zero values)? It has been very efficient for smaller identical problems (reducing the size of these sparse matrices to 10 000 x 10 000), although hasn't worked when I tried it on a problem of that size. In both cases I used a random matrix as an initial guess for the eigenvectors. see

http://www.mathworks.com/matlabcentral/answers/9063-lobpcg-returning-incorrect-results-for-large-sparse-symmetric-matrices

04 Jan 2011 Andrew Knyazev

"One question: Is there any way to compute the lowest eigenpairs above a specific value, as in eigs one can choose a SIGMA to find eigenvalues around it?"

In eigs, the SIGMA-option actually solves the so-called "shift-and-invert" problem, see
http://en.wikipedia.org/wiki/Preconditioner#Spectral_transformations . In LOBPCG, this option is not directly supported, but can be implemented by a user, supplying the corresponding functions to LOBPCG.

20 Oct 2010 Elias

Nice work, really fast and very efficient. Since eigs crashes my cluster because of memory requirements, this seems to be a much better choice. One question:
Is there any way to compute the lowest eigenpairs above a specific value, as in eigs one can choose a SIGMA to find eigenvalues around it?
Thanks

20 Oct 2010 Elias  
Updates

modifying description

16 Jan 2004

The final release for non-generalized eigenproblems.

03 May 2004

The first public release for generalized Hermitian eigenproblems.

19 May 2009

License update to free software (BSD). Comments update.

14 Mar 2010

Editorial changes to make the code Octave-compatible.

17 Oct 2011

A minor update. Functions can now be called using also function handles. Updated comments and examples.

Contact us