NAG Library Routine Document
F08USF (ZHBGST)
1 Purpose
F08USF (ZHBGST) reduces a complex Hermitian-definite generalized eigenproblem
Az=λBz to the standard form
Cy=λy, where
A and
B are band matrices,
A is a complex Hermitian matrix, and
B has been factorized by
F08UTF (ZPBSTF).
2 Specification
SUBROUTINE F08USF ( |
VECT, UPLO, N, KA, KB, AB, LDAB, BB, LDBB, X, LDX, WORK, RWORK, INFO) |
INTEGER |
N, KA, KB, LDAB, LDBB, LDX, INFO |
REAL (KIND=nag_wp) |
RWORK(N) |
COMPLEX (KIND=nag_wp) |
AB(LDAB,*), BB(LDBB,*), X(LDX,*), WORK(N) |
CHARACTER(1) |
VECT, UPLO |
|
The routine may be called by its
LAPACK
name zhbgst.
3 Description
To reduce the complex Hermitian-definite generalized eigenproblem
Az=λBz to the standard form
Cy=λy, where
A,
B and
C are banded, F08USF (ZHBGST) must be preceded by a call to
F08UTF (ZPBSTF) which computes the split Cholesky factorization of the positive definite matrix
B:
B=SHS. The split Cholesky factorization, compared with the ordinary Cholesky factorization, allows the work to be approximately halved.
This routine overwrites A with C=XHAX, where X=S-1Q and Q is a unitary matrix chosen (implicitly) to preserve the bandwidth of A. The routine also has an option to allow the accumulation of X, and then, if z is an eigenvector of C, Xz is an eigenvector of the original system.
4 References
Crawford C R (1973) Reduction of a band-symmetric generalized eigenvalue problem
Comm. ACM 16 41–44
Kaufman L (1984) Banded eigenvalue solvers on vector machines
ACM Trans. Math. Software 10 73–86
5 Parameters
- 1: VECT – CHARACTER(1)Input
On entry: indicates whether
X is to be returned.
- VECT='N'
- X is not returned.
- VECT='V'
- X is returned.
Constraint:
VECT='N' or 'V'.
- 2: UPLO – CHARACTER(1)Input
On entry: indicates whether the upper or lower triangular part of
A is stored.
- UPLO='U'
- The upper triangular part of A is stored.
- UPLO='L'
- The lower triangular part of A is stored.
Constraint:
UPLO='U' or 'L'.
- 3: N – INTEGERInput
On entry: n, the order of the matrices A and B.
Constraint:
N≥0.
- 4: KA – INTEGERInput
On entry: if
UPLO='U', the number of superdiagonals,
ka, of the matrix
A.
If UPLO='L', the number of subdiagonals, ka, of the matrix A.
Constraint:
KA≥0.
- 5: KB – INTEGERInput
On entry: if
UPLO='U', the number of superdiagonals,
kb, of the matrix
B.
If UPLO='L', the number of subdiagonals, kb, of the matrix B.
Constraint:
KA≥KB≥0.
- 6: AB(LDAB,*) – COMPLEX (KIND=nag_wp) arrayInput/Output
-
Note: the second dimension of the array
AB
must be at least
max1,N.
On entry: the upper or lower triangle of the
n by
n Hermitian band matrix
A.
The matrix is stored in rows
1 to
ka+1, more precisely,
- if UPLO='U', the elements of the upper triangle of A within the band must be stored with element Aij in ABka+1+i-jj for max1,j-ka≤i≤j;
- if UPLO='L', the elements of the lower triangle of A within the band must be stored with element Aij in AB1+i-jj for j≤i≤minn,j+ka.
On exit: the upper or lower triangle of
AB is overwritten by the corresponding upper or lower triangle of
C as specified by
UPLO.
- 7: LDAB – INTEGERInput
On entry: the first dimension of the array
AB as declared in the (sub)program from which F08USF (ZHBGST) is called.
Constraint:
LDAB≥KA+1.
- 8: BB(LDBB,*) – COMPLEX (KIND=nag_wp) arrayInput
-
Note: the second dimension of the array
BB
must be at least
max1,N.
On entry: the banded split Cholesky factor of
B as specified by
UPLO,
N and
KB and returned by
F08UTF (ZPBSTF).
- 9: LDBB – INTEGERInput
On entry: the first dimension of the array
BB as declared in the (sub)program from which F08USF (ZHBGST) is called.
Constraint:
LDBB≥KB+1.
- 10: X(LDX,*) – COMPLEX (KIND=nag_wp) arrayOutput
-
Note: the second dimension of the array
X
must be at least
max1,N if
VECT='V' and at least
1 if
VECT='N'.
On exit: the
n by
n matrix
X=S-1Q, if
VECT='V'.
If
VECT='N',
X is not referenced.
- 11: LDX – INTEGERInput
On entry: the first dimension of the array
X as declared in the (sub)program from which F08USF (ZHBGST) is called.
Constraints:
- if VECT='V', LDX≥ max1,N ;
- if VECT='N', LDX≥1.
- 12: WORK(N) – COMPLEX (KIND=nag_wp) arrayWorkspace
- 13: RWORK(N) – REAL (KIND=nag_wp) arrayWorkspace
- 14: INFO – INTEGEROutput
On exit:
INFO=0 unless the routine detects an error (see
Section 6).
6 Error Indicators and Warnings
- INFO<0
If INFO=-i, argument i had an illegal value. An explanatory message is output, and execution of the program is terminated.
7 Accuracy
Forming the reduced matrix C is a stable procedure. However it involves implicit multiplication by B-1. When F08USF (ZHBGST) is used as a step in the computation of eigenvalues and eigenvectors of the original problem, there may be a significant loss of accuracy if B is ill-conditioned with respect to inversion.
8 Further Comments
The total number of real floating point operations is approximately 20n2kB, when VECT='N', assuming n≫kA,kB; there are an additional 5n3kB/kA operations when VECT='V'.
The real analogue of this routine is
F08UEF (DSBGST).
9 Example
This example computes all the eigenvalues of
Az=λBz, where
and
Here
A is Hermitian,
B is Hermitian positive definite, and
A and
B are treated as band matrices.
B must first be factorized by
F08UTF (ZPBSTF). The program calls F08USF (ZHBGST) to reduce the problem to the standard form
Cy=λy, then
F08HSF (ZHBTRD) to reduce
C to tridiagonal form, and
F08JFF (DSTERF) to compute the eigenvalues.
9.1 Program Text
Program Text (f08usfe.f90)
9.2 Program Data
Program Data (f08usfe.d)
9.3 Program Results
Program Results (f08usfe.r)