|
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.
Hi.
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.
Regards,
Dima.