Computes the eigenvalues in a given range and the corresponding eigenvectors of a complex Hermitian matrix.
MXEVAL — Maximum number of eigenvalues to be computed. (Input)
A — Complex
Hermitian matrix of order N.
(Input)
Only the upper triangle is used.
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 — Complex matrix containing in its first NEVAL columns the eigenvectors associated with the eigenvalues found stored in EVAL. Each vector is normalized to have Euclidean length equal to the value one. (Output)
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).
Generic: CALL EVFHF (MXEVAL, A, ELOW, EHIGH, NEVAL, EVAL, EVEC [,…])
Specific: The specific interface names are S_EVFHF and D_EVFHF.
Single: CALL EVFHF (N, MXEVAL, A, LDA, ELOW, EHIGH, NEVAL, EVAL, EVEC, LDEVEC)
Double: The double precision name is DEVHFH.
Routine EVFHF computes the eigenvalues in a given range and the corresponding eigenvectors of a complex Hermitian matrix. Unitary transformations are used to reduce the matrix to an equivalent symmetric tridiagonal matrix. A bisection algorithm is used to compute the eigenvalues in the given range of this tridiagonal matrix. Inverse iteration is used to compute the eigenvectors of the tridiagonal matrix. The eigenvectors of the original matrix are computed by back transforming the eigenvectors of the tridiagonal matrix.
The reduction routine is based on the EISPACK routine HTRIDI. The bisection routine is based on the EISPACK routine BISECT. The inverse iteration routine is based on the EISPACK routine TINVIT. The back transformation routine is based on the EISPACK routine HTRIBK. See Smith et al. (1976) for the EISPACK routines.
1. Workspace may be explicitly provided, if desired, by use of E3FHF/DE3FHF. The reference is:
CALL E3FHF (N, MXEVAL, A, LDA, ELOW, EHIGH, NEVAL, EVAL, EVEC, LDEVEC, ACOPY, ECOPY, RWK, CWK, IWK)
The additional arguments are as follows:
ACOPY — Complex work matrix of size N by N. A and ACOPY may be the same, in which case the first N2 elements of A will be destroyed.
ECOPY — Work matrix of size N by MXEVAL. Used to store eigenvectors of a real tridiagonal matrix.
RWK — Work array of length 8N.
CWK — Complex work array of length 2N.
IWK — Work array of length MXEVAL.
2. Informational errors
Type Code
3 1 The number of eigenvalues in the specified range exceeds MXEVAL. NEVAL contains the number of eigenvalues in the range. No eigenvalues will be computed.
3 2 The iteration for an eigenvector failed to converge. The eigenvector will be set to 0.
3 3 The matrix is not Hermitian. It has a diagonal entry with a small imaginary part.
4 2 The matrix is not Hermitian. It has a diagonal entry with an imaginary part.
In this example, a DATA statement is used to set A to a complex Hermitian matrix. The eigenvalues in the range [-15, 0] and their corresponding eigenvectors are computed and printed. As a test, this example uses MXEVAL = 3. The routine EVFHF computes the number of eigenvalues in the given range. That value, NEVAL, is two. As a check on the computations, the performance index is also computed and printed. For more details, see routine EPIHF.
USE IMSL_LIBRARIES
IMPLICIT NONE
! Declare variables
INTEGER LDA, LDEVEC, MXEVAL, N
PARAMETER (MXEVAL=3, N=3, LDA=N, LDEVEC=N)
!
INTEGER NEVAL, NOUT
REAL EHIGH, ELOW, EVAL(MXEVAL), PI
COMPLEX A(LDA,N), EVEC(LDEVEC,MXEVAL)
! Set values of A
!
! A = ((1, 0) ( 1,-7i) ( 0,- i))
! ((1,7i) ( 5, 0) (10,-3i))
! ((0, i) ( 10, 3i) (-2, 0))
!
DATA A/(1.0,0.0), (1.0,7.0), (0.0,1.0), (1.0,-7.0), (5.0,0.0), &
(10.0,3.0), (0.0,-1.0), (10.0,-3.0), (-2.0,0.0)/
!
! Find eigenvalues and vectors
ELOW = -15.0
EHIGH = 0.0
CALL EVFHF (MXEVAL, A, ELOW, EHIGH, NEVAL, EVAL, EVEC)
! Compute performance index
PI = EPIHF(NEVAL,A,EVAL,EVEC)
! Print results
CALL UMACH (2, NOUT)
WRITE (NOUT,'(/,A,I3)') ' NEVAL = ', NEVAL
CALL WRRRN ('EVAL', EVAL, 1, NEVAL, 1)
CALL WRCRN ('EVEC', EVEC, N, NEVAL, LDEVEC)
WRITE (NOUT,'(/,A,F6.3)') ' Performance index = ', PI
END
NEVAL = 2
EVAL
1 2
-10.63 -0.75
EVEC
1 2
1 (-0.0598,-0.3117) ( 0.8539, 0.0000)
2 (-0.5939, 0.1841) (-0.0313,-0.1380)
3 ( 0.7160, 0.0000) ( 0.0808,-0.4942)
Performance index = 0.057
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |