NAG Library Function Document
nag_zhbgst (f08usc)
1 Purpose
nag_zhbgst (f08usc) reduces a complex Hermitian-definite generalized eigenproblem
to the standard form
, where
and
are band matrices,
is a complex Hermitian matrix, and
has been factorized by
nag_zpbstf (f08utc).
2 Specification
| #include <nag.h> |
| #include <nagf08.h> |
| void |
nag_zhbgst (Nag_OrderType order,
Nag_VectType vect,
Nag_UploType uplo,
Integer n,
Integer ka,
Integer kb,
Complex ab[],
Integer pdab,
const Complex bb[],
Integer pdbb,
Complex x[],
Integer pdx,
NagError *fail) |
|
3 Description
To reduce the complex Hermitian-definite generalized eigenproblem
to the standard form
, where
,
and
are banded, nag_zhbgst (f08usc) must be preceded by a call to
nag_zpbstf (f08utc) which computes the split Cholesky factorization of the positive definite matrix
:
. The split Cholesky factorization, compared with the ordinary Cholesky factorization, allows the work to be approximately halved.
This function overwrites with , where and is a unitary matrix chosen (implicitly) to preserve the bandwidth of . The function also has an option to allow the accumulation of , and then, if is an eigenvector of , is an eigenvector of the original system.
4 References
Crawford C R (1973) Reduction of a band-symmetric generalized eigenvalue problem Comm. ACM 16 41–44
Kaufman L (1984) Banded eigenvalue solvers on vector machines ACM Trans. Math. Software 10 73–86
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
. See
Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.
Constraint:
or Nag_ColMajor.
- 2:
vect – Nag_VectTypeInput
-
On entry: indicates whether
is to be returned.
- is not returned.
- is returned.
Constraint:
or .
- 3:
uplo – Nag_UploTypeInput
-
On entry: indicates whether the upper or lower triangular part of
is stored.
- The upper triangular part of is stored.
- The lower triangular part of is stored.
Constraint:
or .
- 4:
n – IntegerInput
-
On entry:
, the order of the matrices and .
Constraint:
.
- 5:
ka – IntegerInput
On entry: if
, the number of superdiagonals,
, of the matrix
.
If , the number of subdiagonals, , of the matrix .
Constraint:
.
- 6:
kb – IntegerInput
On entry: if
, the number of superdiagonals,
, of the matrix
.
If , the number of subdiagonals, , of the matrix .
Constraint:
.
- 7:
ab[] – ComplexInput/Output
-
Note: the dimension,
dim, of the array
ab
must be at least
.
On entry: the upper or lower triangle of the
by
Hermitian
band matrix
.
This is stored as a notional two-dimensional array with row elements or column elements stored contiguously. The storage of elements of
, depends on the
order and
uplo arguments as follows:
- if and ,
is stored in , for and ; - if and ,
is stored in , for and ; - if and ,
is stored in , for and ; - if and ,
is stored in , for and .
On exit:
the upper or lower triangle of
ab is overwritten by the corresponding upper or lower triangle of
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
in the array
ab.
Constraint:
.
- 9:
bb[] – const ComplexInput
-
Note: the dimension,
dim, of the array
bb
must be at least
.
On entry: the banded split Cholesky factor of
as specified by
uplo,
n and
kb and returned by
nag_zpbstf (f08utc).
- 10:
pdbb – IntegerInput
On entry: the stride separating row or column elements (depending on the value of
order) of the matrix in the array
bb.
Constraint:
.
- 11:
x[] – ComplexOutput
-
Note: the dimension,
dim, of the array
x
must be at least
- when
;
- when
.
The
th element of the matrix
is stored in
- when ;
- when .
On exit: the
by
matrix
, if
.
If
,
x is not referenced.
- 12:
pdx – IntegerInput
-
On entry: the stride separating row or column elements (depending on the value of
order) in the array
x.
Constraints:
- if , ;
- if , .
- 13:
fail – NagError *Input/Output
-
The NAG error argument (see
Section 3.6 in the Essential Introduction).
6 Error Indicators and Warnings
- NE_ALLOC_FAIL
Dynamic memory allocation failed.
- NE_BAD_PARAM
On entry, argument had an illegal value.
- NE_ENUM_INT_2
On entry, , and .
Constraint: if , ;
if , .
- NE_INT
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
On entry, .
Constraint: .
- NE_INT_2
On entry, and .
Constraint: .
On entry, and .
Constraint: .
On entry, and .
Constraint: .
- 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 is a stable procedure. However it involves implicit multiplication by . When nag_zhbgst (f08usc) 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 is ill-conditioned with respect to inversion.
The total number of real floating point operations is approximately , when , assuming ; there are an additional operations when .
The real analogue of this function is
nag_dsbgst (f08uec).
9 Example
This example computes all the eigenvalues of
, where
and
Here
is Hermitian,
is Hermitian positive definite, and
and
are treated as band matrices.
must first be factorized by
nag_zpbstf (f08utc). The program calls nag_zhbgst (f08usc) to reduce the problem to the standard form
, then
nag_zhbtrd (f08hsc) to reduce
to tridiagonal form, and
nag_dsterf (f08jfc) to compute the eigenvalues.
9.1 Program Text
Program Text (f08usce.c)
9.2 Program Data
Program Data (f08usce.d)
9.3 Program Results
Program Results (f08usce.r)