EVFSB
Computes the eigenvalues in a given interval and the corresponding eigenvectors of a real symmetric matrix stored in band symmetric storage mode.
Required Arguments
MXEVAL — Maximum number of eigenvalues to be computed. (Input)
A — Band symmetric matrix of order N. (Input)
NCODA — Number of codiagonals in A. (Input)
ELOW — Lower limit of the interval in which the eigenvalues are sought. (Input)
EHIGH — Upper limit of the interval in which the eigenvalues are sought. (Input)
NEVAL — Number of eigenvalues found. (Output)
EVAL — Real vector of length MXEVAL containing the eigenvalues of A in the interval (ELOW, EHIGH) in decreasing order of magnitude. (Output)
Only the first NEVAL elements of EVAL are significant.
EVEC — Real matrix containing in its first NEVAL columns the eigenvectors associated with the eigenvalues found and stored in EVAL. Eigenvector J corresponds to eigenvalue J for J = 1 to NEVAL. Each vector is normalized to have Euclidean length equal to the value one. (Output)
Optional Arguments
N — Order of the matrix A. (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).
LDEVEC — Leading dimension of EVEC exactly as specified in the dimension statement in the calling program. (Input)
Default: LDEVEC = SIZE (EVEC,1).
FORTRAN 90 Interface
Generic: CALL EVFSB (MXEVEL, A, NCODA, ELOW, EHIGH, NEVAL, EVAL, EVEC [,…])
Specific: The specific interface names are S_EVFSB and D_EVFSB.
FORTRAN 77 Interface
Single: CALL EVFSB (N, MXEVAL, A, LDA, NCODA, ELOW, EHIGH, NEVAL, EVAL, EVEC, LDEVEC)
Double: The double precision name is DEVFSB.
Description
Routine EVFSB computes the eigenvalues in a given range and the corresponding eigenvectors of a real band symmetric matrix. Orthogonal similarity transformations are used to reduce the matrix to an equivalent tridiagonal matrix. A bisection algorithm is used to compute the eigenvalues of the tridiagonal matrix in the required range. Inverse iteration and orthogonalization are used to compute the eigenvectors of the given band symmetric matrix.
The reduction routine is based on the EISPACK routine BANDR; see Garbow et al. (1977). The bisection routine is based on the EISPACK routine BISECT; see Smith et al. (1976). The inverse iteration and orthogonalization steps are based on the EISPACK routine BANDV using remarks from Hanson et al. (1990).
Comments
1. Workspace may be explicitly provided, if desired, by use of E3FSB/DE3FSB. The reference is:
CALL E3FSB (N, MXEVAL, A, LDA, NCODA, ELOW, EHIGH, NEVAL, EVAL, EVEC, LDEVEC, ACOPY, WK1, WK2, IWK)
The additional arguments are as follows:
ACOPY — Work matrix of size NCODA + 1 by N.
WK1 — Work array of length 6N.
WK2 — Work array of length 2N * NCODA + N
IWK — Integer work array of length N.
2. Informational errors
Type |
Code |
Description |
3 |
1 |
The number of eigenvalues in the specified interval exceeds MXEVAL. NEVAL contains the number of eigenvalues in the interval. No eigenvalues will be returned. |
3 |
2 |
Inverse iteration did not converge. Eigenvector is not correct for the specified eigenvalue. |
3 |
3 |
The eigenvectors have lost orthogonality. |
Example
In this example, a DATA statement is used to set A to a matrix given by Gregory and Karney (1969, page 75). The eigenvalues in the range [1, 6] and their corresponding eigenvectors are computed and printed. As a test, this example uses MXEVAL = 4. The routine EVFSB computes NEVAL, the number of eigenvalues in the given range has the value 2. As a check on the computations, the performance index is also computed and printed. For more details, see IMSL routine EPISB.
USE EVFSB_INT
USE EPISB_INT
USE WRRRN_INT
USE UMACH_INT
IMPLICIT NONE
! Declare variables
INTEGER LDA, LDEVEC, MXEVAL, N, NCODA
PARAMETER (MXEVAL=4, N=6, NCODA=2, LDA=NCODA+1, LDEVEC=N)
!
INTEGER NEVAL, NOUT
REAL A(LDA,N), EHIGH, ELOW, EVAL(MXEVAL), &
EVEC(LDEVEC,MXEVAL), PI
! Define values of A:
! A = ( 5 -4 1 )
! ( -4 6 -4 1 )
! ( 1 -4 6 -4 1 )
! ( 1 -4 6 -4 1 )
! ( 1 -4 6 -4 )
! ( 1 -4 5 )
! Represented in band symmetric
! form this is:
! A = ( 0 0 1 1 1 1 )
! ( 0 -4 -4 -4 -4 -4 )
! ( 5 6 6 6 6 5 )
DATA A/0.0, 0.0, 5.0, 0.0, -4.0, 6.0, 1.0, -4.0, 6.0, 1.0, -4.0, &
6.0, 1.0, -4.0, 6.0, 1.0, -4.0, 5.0/
!
! Find eigenvalues and vectors
ELOW = 1.0
EHIGH = 6.0
CALL EVFSB (MXEVAL, A, NCODA, ELOW, EHIGH, NEVAL, EVAL, EVEC)
! Compute performance index
PI = EPISB(NEVAL,A,NCODA,EVAL,EVEC)
! Print results
CALL UMACH (2, NOUT)
WRITE (NOUT,'(/,A,I1)') ' NEVAL = ', NEVAL
CALL WRRRN ('EVAL', EVAL, 1, NEVAL, 1)
CALL WRRRN ('EVEC', EVEC, N, NEVAL, LDEVEC)
WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
END
NEVAL = 2
EVAL
1 2
5.978 2.418
EVEC
1 2
1 0.5211 0.5211
2 -0.2319 0.2319
3 -0.4179 -0.4179
4 0.4179 -0.4179
5 0.2319 0.2319
6 -0.5211 0.5211
Performance index = 0.083