Boost logo

Ublas :

From: Dima Sorkin (dsorkin_at_[hidden])
Date: 2006-02-25 10:57:16

Quoting Karl Meerbergen :
> What surprises me a bit is that you compute the eigenvalues of a generalized
> eigenvalue problem from M^{-1} K. Does M have the same sparse structure as K?
> Which eigenvalues are you looking for?
> Usually, the spectral transformation (K-s*M)^{-1} M is used for
> eigencomputations: it is more powerful than M^{-1} K for many applications
> including structures, acoustics, chemical reactions ...
> > I actually solve the generalized
> > eigen problem
> > M*v*s = K*v
> > in the form
> > (L^-1)*K*(U^-1)*x=x*s
> >
> > where L*U = M (with umfpack)
> > x = U*v
> > "s" is the eigenvalue.

 1) I don't compute A = (L^-1)*K*(U^-1)
    explicitly, as it is dense. K,L,U are sparse compressed.
    I store a matrix K. L and U are stored as umfpack's
    "opaque" objects (See documentation for umfpack and
    umfpack's bindings). In a simplified
    form, each time I have to multiply by A, I actually
    "triangularly solve" with U, then mult by A, then
     again "triangularly solve" with L.
 2) I have choosen umfpack for inversion of M just because
    I am used to it. Any LU or other solver can be used in
    similar way. It should be easy to rewrite my driver
    for ARPACK, as it is not too smart :) .
 3) I don't use spectral transform, as I usually want all
    eigenvalues, or some big amount of eigenvalues with
    smallest magnitude. I don't know how to use spectral
    transform in such case.
 4) ARPACK's performance:I payed attention that for matrices
    I work with (300x300 up to 3500x3500 ) it is much more quick
    to compute all eigenvalues, than some subset of them.