nag_dsbgst (f08uec)

+− Contents

1 Purpose

nag_dsbgst (f08uec) reduces a real symmetric-definite generalized eigenproblem Az=λBz to the standard form Cy=λy, where A and B are band matrices, A is a real symmetric matrix, and B has been factorized by nag_dpbstf (f08ufc).

3 Description

To reduce the real symmetric-definite generalized eigenproblem Az=λBz to the standard form Cy=λy, where A, B and C are banded, nag_dsbgst (f08uec) must be preceded by a call to nag_dpbstf (f08ufc) which computes the split Cholesky factorization of the positive definite matrix B: B=STS. The split Cholesky factorization, compared with the ordinary Cholesky factorization, allows the work to be approximately halved.

This function overwrites A with C=XTAX, where X=S-1Q and Q is a orthogonal matrix chosen (implicitly) to preserve the bandwidth of A. The function also has an option to allow the accumulation of X, and then, if z is an eigenvector of C, Xz is an eigenvector of the original system.

4 References

5 Arguments

1:
order – Nag_OrderTypeInput

On entry: the order argument specifies the two-dimensional storage scheme being used, i.e., row-major ordering or column-major ordering. C language defined storage is specified by order=Nag_RowMajor. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.

Constraint:
order=Nag_RowMajor or Nag_ColMajor.

2:
vect – Nag_VectTypeInput

On entry: indicates whether X is to be returned.

vect=Nag_DoNotForm

X is not returned.

vect=Nag_FormX

X is returned.

Constraint:
vect=Nag_DoNotForm or Nag_FormX.

3:
uplo – Nag_UploTypeInput

On entry: indicates whether the upper or lower triangular part of A is stored.

uplo=Nag_Upper

The upper triangular part of A is stored.

uplo=Nag_Lower

The lower triangular part of A is stored.

Constraint:
uplo=Nag_Upper or Nag_Lower.

4:
n – IntegerInput

On entry:
n, the order of the matrices A and B.

Constraint:
n≥0.

5:
ka – IntegerInput

On entry: if uplo=Nag_Upper, the number of superdiagonals, ka, of the matrix A.

If uplo=Nag_Lower, the number of subdiagonals, ka, of the matrix A.

Constraint:
ka≥0.

6:
kb – IntegerInput

On entry: if uplo=Nag_Upper, the number of superdiagonals, kb, of the matrix B.

If uplo=Nag_Lower, the number of subdiagonals, kb, of the matrix B.

Constraint:
ka≥kb≥0.

7:
ab[dim] – doubleInput/Output

Note: the dimension, dim, of the array ab
must be at least
max1,pdab×n.

On entry: the upper or lower triangle of the n by n symmetric
band matrix A.

This is stored as a notional two-dimensional array with row elements or column elements stored contiguously. The storage of elements of Aij, depends on the order and uplo arguments as follows:

if order=Nag_ColMajor and uplo=Nag_Upper, Aij is stored in ab[ka+i-j+j-1×pdab], for j=1,…,n and i=max1,j-ka,…,j;

if order=Nag_ColMajor and uplo=Nag_Lower, Aij is stored in ab[i-j+j-1×pdab], for j=1,…,n and i=j,…,minn,j+ka;

if order=Nag_RowMajor and uplo=Nag_Upper, Aij is stored in ab[j-i+i-1×pdab], for i=1,…,n and j=i,…,minn,i+ka;

if order=Nag_RowMajor and uplo=Nag_Lower, Aij is stored in ab[ka+j-i+i-1×pdab], for i=1,…,n and j=max1,i-ka,…,i.

On exit:
the upper or lower triangle of ab is overwritten by the corresponding upper or lower triangle of C as specified by uplo.

8:
pdab – IntegerInput

On entry: the stride separating row or column elements (depending on the value of order) of the matrix A in the array
ab.

Constraint:
pdab≥ka+1.

9:
bb[dim] – const doubleInput

Note: the dimension, dim, of the array bb
must be at least
max1,pdbb×n.

6 Error Indicators and Warnings

On entry, vect=value, pdx=value and n=value.
Constraint: if vect=Nag_FormX, pdx≥max1,n;
if vect=Nag_DoNotForm, pdx≥1.

NE_INT

On entry, ka=value.
Constraint: ka≥0.

On entry, n=value.
Constraint: n≥0.

On entry, pdab=value.Constraint: pdab>0.

On entry, pdbb=value.Constraint: pdbb>0.

On entry, pdx=value.Constraint: pdx>0.

NE_INT_2

On entry, ka=value and kb=value.
Constraint: ka≥kb≥0.

On entry, pdab=value and ka=value.
Constraint: pdab≥ka+1.

On entry, pdbb=value and kb=value.
Constraint: pdbb≥kb+1.

NE_INTERNAL_ERROR

An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.

7 Accuracy

Forming the reduced matrix C is a stable procedure. However it involves implicit multiplication by B-1. When nag_dsbgst (f08uec) 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.

8 Further Comments

The total number of floating point operations is approximately 6n2kB, when vect=Nag_DoNotForm, assuming n≫kA,kB; there are an additional 3/2n3kB/kA operations when vect=Nag_FormX.

9 Example

A=0.240.390.420.000.39-0.110.790.630.420.79-0.250.480.000.630.48-0.03 and B=2.070.950.000.000.951.69-0.290.000.00-0.290.65-0.330.000.00-0.331.17.

Here A is symmetric, B is symmetric positive definite, and A and B are treated as band matrices. B must first be factorized by nag_dpbstf (f08ufc). The program calls nag_dsbgst (f08uec) to reduce the problem to the standard form Cy=λy, then nag_dsbtrd (f08hec) to reduce C to tridiagonal form, and nag_dsterf (f08jfc) to compute the eigenvalues.