# ?sbgst

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

## Syntax

FORTRAN 77:

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)

Fortran 95:

call sbgst(a, b [,x] [,uplo] [,info])

## 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 spbstf/dpbstf, 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 spbstf/dpbstf.

  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 first dimension of the array ab; must be at least ka+1.

ldbb

  INTEGER. The first dimension of the array bb; must be at least kb+1.

ldx

  The first 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.

## Fortran 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 Fortran 95 Interface Conventions.

Specific details for the routine sbgst interface are the following:

a

  Stands for argument ab in Fortan 77 interface. Holds the array A of size (ka+1,n).

b

  Stands for argument bb in Fortan 77 interface. 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'`.

Parent topic: Generalized Symmetric-Definite Eigenvalue Problems