Skip to content

Implementation of some Krylov subspace methods in C++ and OpenMP to solve eigenpair problems

Notifications You must be signed in to change notification settings

jar-evans/Krylov_subspace_methods

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Krylov subspace methods

Implementation of some methods to solve eigenvalue problem with the use of Krylov subspaces in C++.

Background

The Krylov subspace is the space spanned by the set of vectors:

equation

equation

Methods making use of these subspaces are most effective for large sparse matrices, as they use matrix-vector multiplication and the resulting subspace to search for solutions as opposed to normal matrix-matrix multiplication, which becomes very expensive for larger systems.

Power method

This is the most simple method and is used to approximate the largest eigenvalue of a system, where the iteration is very simply:

equation

This comes from the idea that equation approximates the dominant eigenvector. Therefore, the dominant eigenvalue comes from the Rayleigh quotient:

equation

Inverse power method*

Where the power method estimates the largest eigenvalue of equation, the inverse power method estimates the smallest eigenvalue of equation. The only extra step is to invert equation, such that the iteration becomes:

equation

and then the eigenvalue can be extracted from the converged to eigenvector via the Rayleigh quotient as before.

Shifted inverse method*

Here the iteration intends to converge to the eigenvalue closest to the given value, equation:

equation

Where the inverse power method operates for equation = 0. Further, finding the inverse of large matrices is not the most pleasant task, therefore typically the approach is to solve the following linear system.

equation

Naturally the better the guess of equation, the faster the convergence. This means in some cases that it is more efficient to update equation with the Rayleigh quotient and 'restart' the iteration, instead of sticking with the same equation until convergence.

Orthogonal iteration*

#TODO

Lanczos iteration

A specific form of the Arnoldi method, for when equation is Hermitian (square matrix which is equal to the conjugate transpose of itself).

The purpose of Lanczos is to reduce the hermitian matrix to a smaller tri-diagonal matrix, for which the eigenpairs can be readily found via another method (QR is common). However, this only works if the eigenpairs of equation approximate those of equation (which isn't actually guarunteed as Lanczos is known to have problems with rounding errors that lead to loss of orthogonality).

Bi-Lanczos iteration*

#TODO

Arnoldi iteration**

Arnoldi (just like Lanczos) reduces equation to a smaller matrix that can be fed into simple methods to approximate the eigenpairs corresponding to the largest eigenvalues of equation.

This smaller matrix, in the case of Arnoldi, is equation, a upper Hessenberg matrix:

equation

where equation is actually the projection of equation onto the Krylov subspace equation. equation is the n-order orthogonal Krylov basis used to map equation to equation.

With each iteration of Arnoldi, a new basis vector of the Krylov subspace orthogonalised wrt the other basis vectors is added to equation. Arnoldi can be restarted in the case the subspace being generated starts to become too large.

Sources

W. Ford. Numerical Linear Algebra with Applications. Academic Press, 2015

B.N. Parlett. The Symmetric Eigenvalue Problem. Classics in Applied Mathematics 20. SIAM, Philadelphia, 1998

Yousef Saad. Numerical Methods for Large Eigenvalue Problems. Manchester University Press, 1992.

D.V. Fedorov. Yet Another Introduction to Numerical Methods. https://phys.au.dk/~fedorov/Numeric/Book/book.pdf, 2013

* Not implemented

** Could potentially maybe possibly still need some fine tuning

About

Implementation of some Krylov subspace methods in C++ and OpenMP to solve eigenpair problems

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published