Re: [eigen] Including Spectra within Eigen 3.4

[ Thread Index | Date Index | More Archives ]

Dear Gael,

Am 22.02.2017 um 19:31 schrieb Gael Guennebaud:

Moreover, it is also unclear to me whether the different definitions of smallest/largest (i.e., signed, magnitude, real part, imaginary part) impacts the algorithmic choices? Can this detail be decided at runtime? Does it
influence the choice of the mode and operation?

I'm not sure about what's actual done in Spectra, Yixuan should correct me, in general the (plain) Arnoldi type methods
sample the spectrum more or less homogeneously, as they are Lanczos type methods with full orthogonalization.
Therefore they are best where the spectrum is not sense, typically the maximal or minimal value. They are bad where the
spectrum is dense, in physics typically close to zero or at some resonance frequency. That's where the shift versions come in.
However, I never implemented them and can't say much concerning these extensions.

In my code I have switched a to generalized (Jacobi-) Davidson type methods pretty early in my career, which are preconditioned Krylov methods.
They are more expensive per iteration, as one has to apply the precnoditioner and need more memory, as one
can't deduce the projected matrix from the orthogonalization, however they typically need significantly less
iterations and are more stable in the context of (near-) degeneracies. Of course, that all depends on the preconditioner.

In return they also allow to pick a state a state from the middle the spectrum, or to select it via a reference state,
see e.g. <>, an approach which gets more fashionable in recent times due to its applicability
to adiabatic quantum computation. So, at least for Davidson type solvers it make sense to provide the selection
rule as a class/struct like lesser and greater for STL. And one should be able to exchange the selection rule at run time.
The selection itself is not time critical and should not appear in any timing benchmark.

All the best,

Mail converted by MHonArc 2.6.19+