1
$\begingroup$

I am trying out the arpack driver dsdrv1, which is used to iteratively obtain the first m eigenvectors from the eigenvalue problem.

$$ \hat{A}\mathbf{x} = \lambda\mathbf{x} $$

As it is an iterative procedure, a good initial guess will reduce the number of iterations needed for convergence. One of the best initial guesses is presumably the correct eigenvectors (obtained, for example, from a previous run).

With arpack's dsdrv1 driver, You can supply an initial guess through the NxN residual array passed to dsaupd, which is fine if you are only computing one eigenvector. However, I am computing m eigenvectors.

I.e. Say I have m correct eigenvectors obtained from a previous run of dsdrv1. How would I utilise these vectors to minimise the number of iterations in a new call to dsdrv1.

I've tried feeding the lowest converged eigenvector back into the procedure by assigning it to the residual array and setting info to 1. Only a few iterations are required if I'm only calculating the first eigenvector. But when I calculate more, the initial guess is worse than a random initial vector. I've also tried feeding the average of all eigenvectors as an initial guess, but no luck either.

In short, if I have all the data from a successful dsdrv1 calculation, can I use it to minimise the number of iterations in a 2nd dsdrv1 run applied to the same eigenvalue problem?

$\endgroup$
1
$\begingroup$

Since no one else has responded to this, I'll take a shot at it.

I'm doubtful you will find an option like you are looking for in Arpack. Here is why I think that. The algorithms in Arpack are based on constructing a vector subspace called a Krylov sequence as follows

$$ K = \{x, Ax, A^2x, A^3x... A^nx\} $$

where $x$ is the single vector you are allowed to specify if you wish. If you could set more than a single vector, the subspace would not necessarily be a Krylov sequence that the algorithm requires.

You say that you have had poor experience choosing the starting $x$ as the first eigenvector from a previous analysis. There is a very good reason why this is particularly bad choice when you want to calculate several eigenvalues. If you look closely at the Krylov sequence you will see that it simply implements the power method of calculating the eigenvector corresponding to the largest eigenvalue of A. Since $x$ is a relatively good approximation to the eigenvector with largest eigenvalue, all of the remaining vectors also are increasingly good approximations to this first eigenvector. The complete subspace has almost no components of the other eigenvectors you want to calculate.

If you are willing to consider alternative eigenvalue solvers and algorithms, the subspace iteration algorithm might be more efficient in your particular case. It has some similarities to the Krylov-based solvers like Arpack but it is generally less efficient. However it allows you to specify an arbitrary vector subspace like your previous set of eigenvectors and that can significantly improve its efficiency. The software package SLEPc includes a subspace iteration algorithm among its many options.

$\endgroup$
  • $\begingroup$ Thanks for the response during the holidays! I believe I've found a reliable description of the subspace iteration method. Even a very basic implementation might serve my purposes. Generally speaking, is there an art to choosing a starting vector when generating a Krylov sequence? Is there any vector I could extract from a previous run that would be a useful candidate? $\endgroup$ – DJames Dec 26 '16 at 12:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.