# Symmetric Eigenvalue Problems

Symmetric eigenvalue problems are posed as follows: given an n-by-n real symmetric or complex Hermitian matrix A, find the eigenvalues λ and the corresponding eigenvectors z that satisfy the equation

`Az = λz` (or, equivalently, `zHA = λzH)`.

In such eigenvalue problems, all n eigenvalues are real not only for real symmetric but also for complex Hermitian matrices A, and there exists an orthonormal system of n eigenvectors. If A is a symmetric or Hermitian positive-definite matrix, all eigenvalues are positive.

To solve a symmetric eigenvalue problem with LAPACK, you usually need to reduce the matrix to tridiagonal form and then solve the eigenvalue problem with the tridiagonal matrix obtained. LAPACK includes routines for reducing the matrix to a tridiagonal form by an orthogonal (or unitary) similarity transformation `A = QTQH` as well as for solving tridiagonal symmetric eigenvalue problems. These routines (for Fortran 77 interface) are listed in Table “Computational Routines for Solving Symmetric Eigenvalue Problems”. Respective routine names in Fortran 95 interface are without the first symbol (see Routine Naming Conventions).

There are different routines for symmetric eigenvalue problems, depending on whether you need all eigenvectors or only some of them or eigenvalues only, whether the matrix A is positive-definite or not, and so on.

These routines are based on three primary algorithms for computing eigenvalues and eigenvectors of symmetric problems: the divide and conquer algorithm, the QR algorithm, and bisection followed by inverse iteration. The divide and conquer algorithm is generally more efficient and is recommended for computing all eigenvalues and eigenvectors. Furthermore, to solve an eigenvalue problem using the divide and conquer algorithm, you need to call only one routine. In general, more than one routine has to be called if the QR algorithm or bisection followed by inverse iteration is used.

Decision tree in Figure “Decision Tree: Real Symmetric Eigenvalue Problems” will help you choose the right routine or sequence of routines for eigenvalue problems with real symmetric matrices. A similar decision tree for complex Hermitian matrices is presented in Figure “Decision Tree: Complex Hermitian Eigenvalue Problems”.

Decision Tree: Real Symmetric Eigenvalue Problems
Decision Tree: Complex Hermitian Eigenvalue Problems

Computational Routines for Solving Symmetric Eigenvalue Problems
Operation | Real symmetric matrices | Complex Hermitian matrices
--- | --- | ---
Reduce to tridiagonal form `A = QTQH` (full storage) | ?sytrd ?syrdb | ?hetrd ?herdb
Reduce to tridiagonal form `A = QTQH` (packed storage) | ?sptrd | ?hptrd
Reduce to tridiagonal form `A = QTQH` (band storage). | ?sbtrd | ?hbtrd
Generate matrix Q (full storage) | ?orgtr | ?ungtr
Generate matrix Q (packed storage) | ?opgtr | ?upgtr
Apply matrix Q (full storage) | ?ormtr | ?unmtr
Apply matrix Q (packed storage) | ?opmtr | ?upmtr
Find all eigenvalues of a tridiagonal matrix T | ?sterf |
Find all eigenvalues and eigenvectors of a tridiagonal matrix T | ?steqr ?stedc | ?steqr ?stedc
Find all eigenvalues and eigenvectors of a tridiagonal positive-definite matrix T. | ?pteqr | ?pteqr
Find selected eigenvalues of a tridiagonal matrix T | ?stebz ?stegr | ?stegr
Find selected eigenvectors of a tridiagonal matrix T | ?stein ?stegr | ?stein ?stegr
Find selected eigenvalues and eigenvectors of f a real symmetric tridiagonal matrix T | ?stemr | ?stemr
Compute the reciprocal condition numbers for the eigenvectors | ?disna | ?disna