Visible to Intel only — GUID: GUID-85306E5E-A6A8-4EA7-949D-E1ABD828DD22
Visible to Intel only — GUID: GUID-85306E5E-A6A8-4EA7-949D-E1ABD828DD22
?hbgst
Reduces a complex Hermitian positive-definite generalized eigenproblem for banded matrices to the standard form using the factorization performed by ?pbstf.
Syntax
call chbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, rwork, info)
call zhbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, rwork, info)
call hbgst(ab, bb [,x] [,uplo] [,info])
Include Files
- mkl.fi, lapack.f90
Description
To reduce the complex Hermitian positive-definite generalized eigenproblem A*z = λ*B*z to the standard form C*x = λ*y, where A, B and C are banded, this routine must be preceded by a call to pbstf/pbstf, which computes the split Cholesky factorization of the positive-definite matrix B: B = SH*S. The split Cholesky factorization, compared with the ordinary Cholesky factorization, allows the work to be approximately halved.
This routine overwrites A with C = XH*A*X, where X = inv(S)*Q, 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, X*z is an eigenvector of the original system.
Input Parameters
- vect
-
CHARACTER*1. Must be 'N' or 'V'.
If vect = 'N', then matrix X is not returned;
If vect = 'V', then matrix X is returned.
- uplo
-
CHARACTER*1. Must be 'U' or 'L'.
If uplo = 'U', ab stores the upper triangular part of A.
If uplo = 'L', ab stores the lower triangular part of A.
- n
-
INTEGER. The order of the matrices A and B (n≥ 0).
- ka
-
INTEGER. The number of super- or sub-diagonals in A
(ka≥ 0).
- kb
-
INTEGER. The number of super- or sub-diagonals in B
(ka≥kb≥ 0).
- ab, bb, work
-
COMPLEX for chbgstDOUBLE COMPLEX for zhbgst
ab(ldab,*) is an array containing either upper or lower triangular part of the Hermitian matrix A (as specified by uplo) in band storage format.
The second dimension of the array ab must be at least max(1, n).
bb(ldbb,*) is an array containing the banded split Cholesky factor of B as specified by uplo, n and kb and returned by pbstf/pbstf.
The second dimension of the array bb must be at least max(1, n).
work(*) is a workspace array, dimension at least max(1, n)
- ldab
-
INTEGER. The leading dimension of the array ab; must be at least ka+1.
- ldbb
-
INTEGER. The leading dimension of the array bb; must be at least kb+1.
- ldx
-
The leading dimension of the output array x. Constraints:
if vect = 'N', then ldx≥ 1;
if vect = 'V', then ldx≥ max(1, n).
- rwork
-
REAL for chbgst
DOUBLE PRECISION for zhbgst
Workspace array, dimension at least max(1, n)
Output Parameters
- ab
-
On exit, this array is overwritten by the upper or lower triangle of C as specified by uplo.
- x
-
COMPLEX for chbgst
DOUBLE COMPLEX for zhbgst
Array.
If vect = 'V', then x(ldx,*) contains the n-by-n matrix X = inv(S)*Q.
If vect = 'N', then x is not referenced.
The second dimension of x must be:
at least max(1, n), if vect = 'V';
at least 1, if vect = 'N'.
- info
-
INTEGER.
If info = 0, the execution is successful.
If info = -i, the i-th parameter had an illegal value.
LAPACK 95 Interface Notes
Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see LAPACK 95 Interface Conventions.
Specific details for the routine hbgst interface are the following:
- ab
-
Holds the array A of size (ka+1,n).
- bb
-
Holds the array B of size (kb+1,n).
- x
-
Holds the matrix X of size (n,n).
- uplo
-
Must be 'U' or 'L'. The default value is 'U'.
- vect
-
Restored based on the presence of the argument x as follows: vect = 'V', if x is present, vect = 'N', if x is omitted.
Application Notes
Forming the reduced matrix C involves implicit multiplication by inv(B). When the routine 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. The total number of floating-point operations is approximately 20n2*kb, when vect = 'N'. Additional 5n3*(kb/ka) operations are required when vect = 'V'. All these estimates assume that both ka and kb are much less than n.