F08SPF (ZHEGVX) (PDF version)
F08 Chapter Contents
F08 Chapter Introduction
NAG Library Manual

NAG Library Routine Document

F08SPF (ZHEGVX)

Note:  before using this routine, please read the Users' Note for your implementation to check the interpretation of bold italicised terms and other implementation-dependent details.

+ Contents

    1  Purpose
    7  Accuracy

1  Purpose

F08SPF (ZHEGVX) computes selected eigenvalues and, optionally, eigenvectors of a complex generalized Hermitian-definite eigenproblem, of the form
Az=λBz ,   ABz=λz   or   BAz=λz ,
where A and B are Hermitian and B is also positive definite. Eigenvalues and eigenvectors can be selected by specifying either a range of values or a range of indices for the desired eigenvalues.

2  Specification

SUBROUTINE F08SPF ( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, LWORK, RWORK, IWORK, JFAIL, INFO)
INTEGER  ITYPE, N, LDA, LDB, IL, IU, M, LDZ, LWORK, IWORK(5*N), JFAIL(*), INFO
REAL (KIND=nag_wp)  VL, VU, ABSTOL, W(N), RWORK(7*N)
COMPLEX (KIND=nag_wp)  A(LDA,*), B(LDB,*), Z(LDZ,*), WORK(max(1,LWORK))
CHARACTER(1)  JOBZ, RANGE, UPLO
The routine may be called by its LAPACK name zhegvx.

3  Description

F08SPF (ZHEGVX) first performs a Cholesky factorization of the matrix B as B=UHU , when UPLO='U' or B=LLH , when UPLO='L'. The generalized problem is then reduced to a standard symmetric eigenvalue problem
Cx=λx ,
which is solved for the desired eigenvalues and eigenvectors. The eigenvectors of C are then backtransformed to give the eigenvectors of the original problem.
For the problem Az=λBz  and ABz=λz , the eigenvectors are normalized so that
zH B z = I .
For the problem B A z = λ z  we correspondingly have
zH B-1 z = I .

4  References

Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999) LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia http://www.netlib.org/lapack/lug
Demmel J W and Kahan W (1990) Accurate singular values of bidiagonal matrices SIAM J. Sci. Statist. Comput. 11 873–912
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

5  Parameters

1:     ITYPE – INTEGERInput
On entry: specifies the problem type to be solved.
ITYPE=1
Az=λBz.
ITYPE=2
ABz=λz.
ITYPE=3
BAz=λz.
2:     JOBZ – CHARACTER(1)Input
On entry: if JOBZ='N', compute eigenvalues only.
If JOBZ='V', compute eigenvalues and eigenvectors.
Constraint: JOBZ='N' or 'V'.
3:     RANGE – CHARACTER(1)Input
Constraint: RANGE='A', 'V' or 'I'.
4:     UPLO – CHARACTER(1)Input
On entry: if UPLO='U', the upper triangles of A and B are stored.
If UPLO='L', the lower triangles of A and B are stored.
Constraint: UPLO='U' or 'L'.
5:     N – INTEGERInput
On entry: n, the order of the matrices A and B.
Constraint: N0.
6:     A(LDA,*) – COMPLEX (KIND=nag_wp) arrayInput/Output
Note: the second dimension of the array A must be at least max1,N.
On entry: the n by n Hermitian matrix A.
  • If UPLO='U', the upper triangular part of A must be stored and the elements of the array below the diagonal are not referenced.
  • If UPLO='L', the lower triangular part of A must be stored and the elements of the array above the diagonal are not referenced.
On exit: the lower triangle (if UPLO='L') or the upper triangle (if UPLO='U') of A, including the diagonal, is destroyed.
7:     LDA – INTEGERInput
On entry: the first dimension of the array A as declared in the (sub)program from which F08SPF (ZHEGVX) is called.
Constraint: LDAmax1,N.
8:     B(LDB,*) – COMPLEX (KIND=nag_wp) arrayInput/Output
Note: the second dimension of the array B must be at least max1,N.
On entry: the Hermitian matrix B:
  • if UPLO='U', the leading n by n upper triangular part of B contains the upper triangular part of the matrix B;
  • if UPLO='L', the leading n by n lower triangular part of B contains the lower triangular part of the matrix B.
On exit: if INFON, the part of B containing the matrix is overwritten by the triangular factor U or L from the Cholesky factorization B=UHU or B=LLH.
9:     LDB – INTEGERInput
On entry: the first dimension of the array B as declared in the (sub)program from which F08SPF (ZHEGVX) is called.
Constraint: LDBmax1,N.
10:   VL – REAL (KIND=nag_wp)Input
11:   VU – REAL (KIND=nag_wp)Input
Constraint: if RANGE='V', VL<VU.
12:   IL – INTEGERInput
13:   IU – INTEGERInput
Constraints:
  • if RANGE='I' and N=0, IL=1 and IU=0;
  • if RANGE='I' and N>0, 1ILIUN.
14:   ABSTOL – REAL (KIND=nag_wp)Input
On entry: the absolute error tolerance for the eigenvalues. An approximate eigenvalue is accepted as converged when it is determined to lie in an interval a,b  of width less than or equal to
ABSTOL+ε maxa,b ,
where ε  is the machine precision. If
ABSTOL is less than or equal to zero, then ε T1  will be used in its place, where T is the tridiagonal matrix obtained by reducing C to tridiagonal form. Eigenvalues will be computed most accurately when ABSTOL is set to twice the underflow threshold 2 × X02AMF   , not zero. If this routine returns with INFO>0, indicating that some eigenvectors did not converge, try setting ABSTOL to 2 × X02AMF   . See Demmel and Kahan (1990).
15:   M – INTEGEROutput
On exit: the total number of eigenvalues found. 0MN.
If RANGE='A', M=N.
If RANGE='I', M=IU-IL+1.
16:   W(N) – REAL (KIND=nag_wp) arrayOutput
On exit: the first M elements contain the selected eigenvalues in ascending order.
17:   Z(LDZ,*) – COMPLEX (KIND=nag_wp) arrayOutput
Note: the second dimension of the array Z must be at least max1,M if JOBZ='V', and at least 1 otherwise.
On exit: if JOBZ='V', then if INFO=0, the first M columns of Z contain the orthonormal eigenvectors of the matrix A corresponding to the selected eigenvalues, with the ith column of Z holding the eigenvector associated with Wi. The eigenvectors are normalised as follows:
  • if ITYPE=1 or 2, ZTBZ=I;
  • if ITYPE=3, ZTB-1Z=I.
If JOBZ='N', Z is not referenced.
If an eigenvector fails to converge, then that column of Z contains the latest approximation to the eigenvector, and the index of the eigenvector is returned in JFAIL.
Note:  you must ensure that at least max1,M columns are supplied in the array Z; if RANGE='V', the exact value of M is not known in advance and an upper bound of at least N must be used.
18:   LDZ – INTEGERInput
On entry: the first dimension of the array Z as declared in the (sub)program from which F08SPF (ZHEGVX) is called.
Constraints:
  • if JOBZ='V', LDZmax1,N;
  • otherwise LDZ1.
19:   WORK(max1,LWORK) – COMPLEX (KIND=nag_wp) arrayWorkspace
20:   LWORK – INTEGERInput
On entry: the dimension of the array WORK as declared in the (sub)program from which F08SPF (ZHEGVX) is called.
If LWORK=-1, a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued.
Suggested value: for optimal performance, LWORKnb+1×N, where nb is the optimal block size for F08FSF (ZHETRD).
Constraint: LWORKmax1,2×N.
21:   RWORK(7×N) – REAL (KIND=nag_wp) arrayWorkspace
22:   IWORK(5×N) – INTEGER arrayWorkspace
23:   JFAIL(*) – INTEGER arrayOutput
On exit: if JOBZ='V', then if INFO=0, the first M elements of JFAIL are zero.
If INFO>0, JFAIL contains the indices of the eigenvectors that failed to converge.
If JOBZ='N', JFAIL is not referenced.
24:   INFO – INTEGEROutput

6  Error Indicators and Warnings

Errors or warnings detected by the routine:
INFO<0
If INFO=-i, argument i had an illegal value. An explanatory message is output, and execution of the program is terminated.
INFO>0
F07FRF (ZPOTRF) or F08FPF (ZHEEVX) returned an error code:
N if INFO=i, F08FPF (ZHEEVX) failed to converge; i eigenvectors failed to converge. Their indices are stored in array JFAIL;
>N if INFO=N+i, for 1iN, then the leading minor of order i of B is not positive definite. The factorization of B could not be completed and no eigenvalues or eigenvectors were computed.

7  Accuracy

If B is ill-conditioned with respect to inversion, then the error bounds for the computed eigenvalues and vectors may be large, although when the diagonal elements of B differ widely in magnitude the eigenvalues and eigenvectors may be less sensitive than the condition of B would suggest. See Section 4.10 of Anderson et al. (1999) for details of the error bounds.

8  Further Comments

The total number of floating point operations is proportional to n3.
The real analogue of this routine is F08SBF (DSYGVX).

9  Example

This example finds all the eigenvalues in the half-open interval -3,3, and corresponding eigenvectors, of the generalized Hermitian eigenproblem Az=λBz, where
A = -7.36i+0.00 0.77-0.43i -0.64-0.92i 3.01-6.97i 0.77+0.43i 3.49i+0.00 2.19+4.45i 1.90+3.73i -0.64+0.92i 2.19-4.45i 0.12i+0.00 2.88-3.17i 3.01+6.97i 1.90-3.73i 2.88+3.17i -2.54i+0.00
and
B = 3.23i+0.00 1.51-1.92i 1.90+0.84i 0.42+2.50i 1.51+1.92i 3.58i+0.00 -0.23+1.11i -1.18+1.37i 1.90-0.84i -0.23-1.11i 4.09i+0.00 2.33-0.14i 0.42-2.50i -1.18-1.37i 2.33+0.14i 4.29i+0.00 .
The example program for F08SQF (ZHEGVD) illustrates solving a generalized Hermitian eigenproblem of the form ABz=λz.

9.1  Program Text

Program Text (f08spfe.f90)

9.2  Program Data

Program Data (f08spfe.d)

9.3  Program Results

Program Results (f08spfe.r)


F08SPF (ZHEGVX) (PDF version)
F08 Chapter Contents
F08 Chapter Introduction
NAG Library Manual

© The Numerical Algorithms Group Ltd, Oxford, UK. 2011