Fast calculation of eigenvalues

Background:

Now I have a symmetric matrix A. I need to find the first n eigenvalues and eigenvectors. (I have not actually started to write code, but in the algorithm process I observed the need to solve the eigenvalues and eigenvectors of matrix A.)

On the details of matrix A:

  • A should be a Laplace matrix.
  • The size of A may be 100,000 × 100,000.
  • A is a symmetric positive semidefinite matrix.
  • The matrix A that I get from calculation is usually dense, and it is not a sparse matrix.
    (If you have some suggestions for solving sparse matrix in the same situation, it is also possible)

Question:

My question is which method can be used for quick solution ? (including parallel computing with GPU or multi-core processor)

So far as I know, there are the following ways to achieve my goal in Julia:

  • using LinearAlgebra: eigvals(A) and eigvecs(A)
  • using Arpack: eigs(A)
  • using KrylovKit: eigsolve(A)

At present, I don’t know which of the three methods is the fastest (for large symmetric matrix). Or is there any faster calculation method besides the above methods?

Any reply is highly appreciated! :grinning:

1 Like

Properties of the matrix?

Sorry for the lack of detailed information :sweat_smile:, I’ve updated the questions so far.

The important point is: is it sparse or dense? If dense, you can’t easily beat eigen. If it’s sparse and you only need a couple of eigenpairs, use Lanczos from Arpack/KrylovKit, or LOBPCG from IterativeSolvers.

6 Likes

Also, “large” is somewhat subjective, so it would be useful to know the typical size.

An MWE with a function that generates a matrix that reflects the structure of your matrix may result in more concrete answers.

2 Likes

You have the option ishermitian in KrylovKit.jl. It should not speed things up too much though.

Thank you for your advice, I have updated the question. :grinning: