GVLSP

 


   more...

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

Output

 

EVAL

1 2 3

-4.717 4.393 -0.676