The IMSL_EIG function computes the eigenexpansion of a real or complex matrix A. If the matrix is known to be symmetric or Hermitian, a keyword can be used to trigger more efficient algorithms.
This routine requires an IDL Advanced Math and Stats license. For more information, contact your sales or technical support representative.
If A is a real, general matrix, the IMSL_EIG function computes the eigenvalues of A by a two-phase process. The matrix is reduced to upper Hessenberg form by elementary orthogonal or Gauss similarity transformations, then the eigenvalues are computed using a QR or combined LR-QR algorithm (Golub and Van Loan 1989, pp. 373–382, and Watkins and Elsner 1990). The combined LR-QR algorithm is based on an implementation by Jeff Haag and David Watkins. Eigenvectors are then calculated as required. When eigenvectors are computed, the QR algorithm is used to compute the eigenexpansion. When only eigenvalues are required, the combined LR-QR algorithm is used.
If A is a complex, general matrix, the IMSL_EIG function computes the eigenvalues of A by a two-phase process. The matrix is reduced to upper Hessenberg form by elementary Gauss transformations, then the eigenvalues are computed using an explicitly shifted LR algorithm. Eigenvectors are calculated during the iterations for the eigenvalues (Martin and Wilkinson 1971).
If A is a real, symmetric matrix and the keyword SYMMETRIC is used, the IMSL_EIG function computes the eigenvalues of A by a two-phase process. The matrix is reduced to tridiagonal form by elementary orthogonal similarity transformations, then the eigenvalues are computed using a rational QR or bisection algorithm. Eigenvectors are calculated as required (see Parlett 1980, pp. 169–173).
If A is a complex, Hermitian matrix and the keyword SYMMETRIC is used, the IMSL_EIG function computes the eigenvalues of A by a two-phase process. The matrix is reduced to tridiagonal form by elementary orthogonal similarity transformations, then the eigenvalues are computed using a rational QR or bisection algorithm. Eigenvectors are calculated as required.
If keyword SYMMETRIC is used, it is possible to force the IMSL_EIG function to return the eigenvalues and, optionally, eigenvectors that lie in a specified interval. The interval is defined using keywords LOWER_LIMIT and UPPER_LIMIT. The NUMBER keyword is provided to return the number of elements of the returned array that contain valid eigenvalues. The first NUMBER elements of the returned array contain the computed eigenvalues, and all remaining elements contain NaN (Not a Number).
Examples
Example 1
This example computes the eigenvalues of a real 3-by-3 matrix.
RM, a, 3, 3
row 0: 8 -1 -5
row 1: -4 4 -2
row 2: 18 -5 -7
eigval = IMSL_EIG(a)
PM, eigval, Title = 'Eigenvalues of A'
Eigenvalues of A
( 2.00000, 4.00001)
( 2.00000, -4.00001)
( 1.00000, 0.00000)
Example 2
This example is a variation of the first example. It computes the eigenvectors as well as the eigenvalues.
RM, a, 3, 3
row 0: 8 -1 -5
row 1: -4 4 -2
row 2: 18 -5 -7
eigval = IMSL_EIG(a, Vectors = eigvec)
PM, eigval, Title = 'Eigenvalues of A'
Eigenvalues of A
( 2.00000, 4.00000)
( 2.00000, -4.00000)
( 1.00001, 0.00000)
PM, eigvec, Title = 'Eigenvectors of A'
IDL prints:
Eigenvectors of A
( 0.316228, 0.316228)( 0.316228, -0.316228)
( 0.408248, 0.00000)
( 2.08616e-07, 0.632455)( 2.08616e-07, -0.632455)
( 0.816497, 0.00000)
( 0.632456, 0.00000)( 0.632456, 0.00000)
( 0.408247, 0.00000)
Example 3
This example computes Eigenvalues of a complex matrix.
RM, a, 4, 4, /Complex
row 0: (5, 9) (5, 5) (-6, -6) (-7, -7)
row 1: (3, 3) (6, 10) (-5, -5) (-6, -6)
row 2: (2, 2) (3, 3) (-1, 3) (-5, -5)
row 3: (1, 1) (2, 2) (-3, -3) ( 0, 4)
eigval = IMSL_EIG(a)
PM, eigval, Title = 'Eigenvalues of A'
IDL prints:
Eigenvalues of A
( 4.00000, 8.00000)
( 3.00000, 7.00000)
( 2.00000, 6.00000)
( 1.00000, 5.00000)
Errors
Warnings
MATH_SLOW_CONVERGENCE_GEN: Iteration for an eigenvalue did not converge after # iterations.
Syntax
Result = IMSL_EIG(A [, /DOUBLE] [, /LOWER_LIMIT] [, NUMBER=value] [, SYMMETRIC=value] [, /UPPER_LIMIT] [, VECTORS=variable])
Return Value
A one-dimensional matrix containing the complex eigenvalues of the matrix.
Arguments
A
Two-dimensional matrix containing the data.
Keywords
DOUBLE (optional)
If present and nonzero, double precision is used.
LOWER_LIMIT (optional)
Forces the IMSL_EIG function to return the eigenvalues and, optionally, eigenvectors that lie in the interval within the lower limit LOWER_LIMIT and upper limit UPPER_LIMIT. If LOWER_LIMIT is specified, the keywords UPPER_LIMIT and SYMMETRIC must also be specified. Default: (LOWER_LIMIT, UPPER_LIMIT) = (-infinity, +infinity)
NUMBER (optional)
Number of eigenvalues and eigenvectors in the range (LOWER_LIMIT, UPPER_LIMIT). This keyword is only available if also using the keyword SYMMETRIC.
SYMMETRIC (optional)
If present and nonzero, a is assumed to be symmetric in the real case and Hermitian in the complex case. Using SYMMETRIC triggers the use of a more appropriate algorithm for symmetric and Hermitian matrices.
UPPER_LIMIT (optional)
Forces the IMSL_EIG function to return the eigenvalues and, optionally, eigenvectors that lie in the interval within the lower limit LOWER_LIMIT and upper limit UPPER_LIMIT. If UPPER_LIMIT is specified, SYMMETRIC and LOWER_LIMIT must also be specified. Default: (LOWER_LIMIT, UPPER_LIMIT) = (-infinity, +infinity)
VECTORS (optional)
The named variable into which the two-dimensional array containing the eigenvectors of the matrix a is stored.
Version History
See Also
IMSL_EIGSYMGEN, IMSL_GENEIG