GVLSP
Computes all of the eigenvalues of the generalized real symmetric eigenvalue problem Az = λBz, with B symmetric positive definite.
Required Arguments
A — Real symmetric matrix of order N. (Input)
B — Positive definite symmetric matrix of order N. (Input)
EVAL — Vector of length N containing the eigenvalues in decreasing order of magnitude. (Output)
Optional Arguments
N — Order of the matrices A and B. (Input)
Default: N = SIZE (A,2).
LDA — Leading dimension of A exactly as specified in the dimension statement in the calling program. (Input)
Default: LDA = SIZE (A,1).
LDB — Leading dimension of B exactly as specified in the dimension statement in the calling program. (Input)
Default: LDB = SIZE (B,1).
FORTRAN 90 Interface
Generic: CALL GVLSP (A, B, EVAL [,…])
Specific: The specific interface names are S_GVLSP and D_GVLSP.
FORTRAN 77 Interface
Single: CALL GVLSP (N, A, LDA, B, LDB, EVAL)
Double: The double precision name is DGVLSP.
Description
Routine GVLSP computes the eigenvalues of Ax = λBx with A symmetric and B symmetric positive definite. The Cholesky factorization B = RT R, with R a triangular matrix, is used to transform the equation Ax = λBx to
(R-T AR-1)(Rx) = λ (Rx)
The eigenvalues of C = R-T AR-1 are then computed. This development is found in Martin and Wilkinson (1968). The Cholesky factorization of B is computed based on IMSL routine LFTDS, (see Chapter 1, “Linear Systems”). The eigenvalues of C are computed based on routine EVLSF. Further discussion and some timing results are given Hanson et al. (1990).
Comments
1. Workspace may be explicitly provided, if desired, by use of G3LSP/DG3LSP. The reference is:
CALL G3LSP (N, A, LDA, B, LDB, EVAL, IWK, WK1, WK2)
The additional arguments are as follows:
IWK — Integer work array of length N.
WK1 — Work array of length 2N.
WK2 — Work array of length N2 + N.
2. Informational errors
Type |
Code |
Description |
4 |
1 |
The iteration for an eigenvalue failed to converge. |
4 |
2 |
Matrix B is not positive definite. |
Example
In this example, a DATA statement is used to set the matrices A and B. The eigenvalues of the system are computed and printed.
USE GVLSP_INT
USE WRRRN_INT
IMPLICIT NONE
! Declare variables
INTEGER LDA, LDB, N
PARAMETER (N=3, LDA=N, LDB=N)
!
REAL A(LDA,N), B(LDB,N), EVAL(N)
! Define values of A:
! A = ( 2 3 5 )
! ( 3 2 4 )
! ( 5 4 2 )
DATA A/2.0, 3.0, 5.0, 3.0, 2.0, 4.0, 5.0, 4.0, 2.0/
!
! Define values of B:
! B = ( 3 1 0 )
! ( 1 2 1 )
! ( 0 1 1 )
DATA B/3.0, 1.0, 0.0, 1.0, 2.0, 1.0, 0.0, 1.0, 1.0/
!
! Find eigenvalues
CALL GVLSP (A, B, EVAL)
! Print results
CALL WRRRN ('EVAL', EVAL, 1, N, 1)
END
EVAL
1 2 3
-4.717 4.393 -0.676