Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 7/13/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?sbgst

Reduces a real symmetric-definite generalized eigenproblem for banded matrices to the standard form using the factorization performed by ?pbstf.

Syntax

call ssbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info)

call dsbgst(vect, uplo, n, ka, kb, ab, ldab, bb, ldbb, x, ldx, work, info)

call sbgst(ab, bb [,x] [,uplo] [,info])

Include Files

  • mkl.fi, lapack.f90

Description

To reduce the real symmetric-definite generalized eigenproblem A*z = λ*B*z to the standard form C*y=λ*y, where A, B and C are banded, this routine must be preceded by a call to pbstf, which computes the split Cholesky factorization of the positive-definite matrix B: B=ST*S. The split Cholesky factorization, compared with the ordinary Cholesky factorization, allows the work to be approximately halved.

This routine overwrites A with C = XT*A*X, where X = inv(S)*Q and Q is an orthogonal 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

REAL for ssbgst

DOUBLE PRECISION for dsbgst

ab(ldab,*) is an array containing either upper or lower triangular part of the symmetric 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, 2*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).

Output Parameters

ab

On exit, this array is overwritten by the upper or lower triangle of C as specified by uplo.

x

REAL for ssbgst

DOUBLE PRECISION for dsbgst

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 sbgst 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.

If ka and kb are much less than n then the total number of floating-point operations is approximately 6n2*kb, when vect = 'N'. Additional (3/2)n3*(kb/ka) operations are required when vect = 'V'.