Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 10/31/2024
Public
Document Table of Contents

?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, mkl_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

(kakb 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.