[SciPy-User] Incorrect eigenvectors/values from scipy.sparse.linalg.lobpcg

Charanpal Dhanjal dhanjal at telecom-paristech.fr
Wed Nov 9 13:55:10 EST 2011


Hi all,

I wanted to use scipy.sparse.linalg.lobpcg and found that it does not 
seem to work as described. Here is some code demonstrating the problem:

============================================
import numpy
import scipy.sparse.linalg

numpy.random.seed(21)

n = 20
A = numpy.random.rand(n, n)
A = A.T.dot(A)
s1, U1 = numpy.linalg.eig(A)
print(s1)

k = 5
X = numpy.random.rand(A.shape[0], k)
w, V = scipy.sparse.linalg.lobpcg(A, X, tol=1e-30, largest=True, 
maxiter=100)

print(w)
print(numpy.sum(V**2, 0))
print(numpy.linalg.norm(A.dot(V) - V.dot(numpy.diag(w))))
============================================

and the output on my machine is:

[ 106.1436    4.8357    4.6157    3.6735    2.9786    2.7774    2.4734  
  1.8922    1.8146    1.5884
     1.0942    0.985     0.7575    0.6286    0.4411    0.2275    0.0039  
  0.0501    0.0364    0.136 ]
[ 0.2275+0.j  0.0039+0.j  0.0501+0.j  0.0364+0.j  0.1360+0.j]
[  2.7735   4.7396   3.8368   4.5054  14.7127]
406.94471445

So, it looks like lobpcg is finding the smallest eigenvalues even 
though largest=True. When I change largest=False, then lobpcg returns 
the 2nd to 5th largest eigenvectors, i.e. it excludes the very largest 
for some reason. Furthermore, the norms of the eigenvectors are not 1 
and the last print statement shows the eigenvectors are just not 
correct. Any ideas about this? I tried playing around with tol and 
maxiter parameters to no avail.

I read that some bugs in this function had been fixed in version 0.9 
(the version I am using). Also, I am using python 2.7.2 and numpy 1.6.1 
on Ubuntu 11.10, if that helps.

Thanks in advance for any help,
Charanpal



More information about the SciPy-User mailing list