[SciPy-dev] integration of symeig in SciPy
Nils Wagner
nwagner at iam.uni-stuttgart.de
Fri Oct 24 11:29:29 EDT 2008
On Fri, 24 Oct 2008 08:04:46 -0400
alex griffing <argriffi at ncsu.edu> wrote:
> Tiziano Zito wrote:
>> Dear SciPy devs,
>>
>> there has been some discussion about integrating symeig
>>in SciPy.
>> symeig <http://mdp-toolkit.sourceforge.net/symeig.html>
>>is a Python
>> wrapper for the LAPACK functions to solve the standard
>>and
>> generalized eigenvalue problems for symmetric
>>(hermitian) positive
>> definite matrices. It is superior to the scipy
>>"linalg.eigh" wrapper
>> because it wraps *all* relevant LAPACK routines,
>>enabling for
>> example to just return a subset of all
>>egenvectors/eigenvalues,
>> which is a killer feature if you are dealing with
>>huge-nonsparse
>> matrices. Some of these LAPACK routines are available in
>> scipy.lib.lapack.flapack and can be accessed through
>> scipy.lib.lapack.get_lapack_funcs . Some of them are
>>still missing
>> in scipy, while symeig offers a unified interface to all
>>relevant
>> LAPACK functions. symeig has been dowloaded more than
>>1300 times
>> since its first public appearance on sourceforge (under
>>the
>> mdp-toolkit package) in 2004. It features a complete
>>unit test and a
>> telling doc-string. I am one of the authors of symeig
>>and have been
>> contacted by some scipy devs to discuss the integration
>>of symeig in
>> scipy. I am more than willing to help doing this. The
>>most difficult
>> part (the LGPL license) has been addressed already: I've
>>re-issued
>> symeig under a BSD license. Next step would be to adapt
>>symeig code
>> and tests to the scipy framework. Some questions to you:
>>
>> - where would you like to have symeig? (I would suggest
>>scipy.linalg)
>>
>> - should we change the signature to match or resamble
>>that of other
>> eigenproblem-related functions in scipy?
>>
>> - is there a responsible scipy dev for the linalg
>>package I can bother
>> with any questions I may have in the process?
>>
>> - do I get svn commit rights or should I work on a local
>>copy and
>> send a patch?
>>
>> let me know,
>>
>> tiziano
>>
>
> This sounds like it would be very useful for scipy
>although I am just a
> user not a dev. Could I use symeig to extract only the
>eigenvector
> corresponding to the largest eigenvalue, given a
>non-sparse symmetric
> real matrix whose eigenvalues are all positive except
>for exactly one
> that is zero? The documentation for symeig says that it
>works for
> "symmetric (hermitian) definite positive matrices" but I
>guess mine
> would be a "symmetric (hermitian) semi-definite positive
>matrix". If
> symeig wouldn't work, is there another way I could do
>this without using
> eigh to get the full eigendecomposition?
>
> Thanks,
> Alex
> _______________________________________________
> Scipy-dev mailing list
> Scipy-dev at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-dev
Here is an example where K is positive semidefinite.
from symeig import symeig
from numpy import diag, ones, r_
n = 10
M = 2.0*diag(ones(n))
#
# Symmetric positive-semidefinite
#
K =
diag(r_[1.0,2*ones(n-2),1])-diag(ones(n-1),1)-diag(ones(n-1),-1)
K[0,0] = 1.0
K[-1,-1] = 1.0
print M
print K
lo = 1
hi = 1
w,Z = symeig(K,M,range=(lo,hi))
print
print 'Smallest eigenvalue',w
print
print 'Rigid body mode'
print
print Z
lo = n
hi = n
w,Z = symeig(K,M,range=(lo,hi))
print
print 'Largest eigenvalue',w
print
print 'Corresponding eigenvector'
print
print Z
Nils
More information about the SciPy-Dev
mailing list