Visible to Intel only — GUID: GUID-F52443B0-8063-4E7B-A7ED-4A7905D58A11
Visible to Intel only — GUID: GUID-F52443B0-8063-4E7B-A7ED-4A7905D58A11
?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
(ka≥kb≥ 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'.