Next: The Generalised Eigenvalue Problem
Up: Matrix Eigenvalue Problems
Previous: General Principles
Routines are available to diagonalise real
symmetric, Hermitian,
tridiagonal and general matrices.
In the
first 2 cases this is usually a 2 step process in which the matrix is
first tridiagonalised (transformed to tridiagonal form) and then passed
to a routine for diagonalising a tridiagonal matrix. Routines are
available which find only the eigenvalues or both eigenvalues and
eigenvectors. The former are usually much faster than the latter.
Usually the eigenvalues of a Hermitian matrix are returned sorted into
ascending order, but
this is not always the case (check the description of the routine).
Also the eigenvectors are usually normalised to unity.
For non-Hermitian matrices only the right-handed eigenvectors are
returned and are not normalised. In fact it is not always clear what
normalisation means in the general case.
Some older FORTRAN and all C (not C++) and PASCAL routines for complex
matrices store the real and imaginary parts as separate arrays. The
eigenvalues and eigenvectors may also be returned in this form. This is
due to 2 facts
- The original routines from
Wilkinson and Reinsch (Wilkinson, 1964) were written in ALGOL, which had no
complex
type.
- Many FORTRAN compilers (even recent ones)
handle complex numbers very inefficiently, in that the use a function
even for complex addition rather than inline code. In C++ it is
worthwhile checking the
complex
header file to see how this is
implemented.
Next: The Generalised Eigenvalue Problem
Up: Matrix Eigenvalue Problems
Previous: General Principles