NAG Library Function Document
nag_zsteqr (f08jsc)
1 Purpose
nag_zsteqr (f08jsc) computes all the eigenvalues and, optionally, all the eigenvectors of a complex Hermitian matrix which has been reduced to tridiagonal form.
2 Specification
| #include <nag.h> |
| #include <nagf08.h> |
| void |
nag_zsteqr (Nag_OrderType order,
Nag_ComputeZType compz,
Integer n,
double d[],
double e[],
Complex z[],
Integer pdz,
NagError *fail) |
|
3 Description
nag_zsteqr (f08jsc) computes all the eigenvalues and, optionally, all the eigenvectors of a real symmetric tridiagonal matrix
.
In other words, it can compute the spectral factorization of
as
where
is a diagonal matrix whose diagonal elements are the eigenvalues
, and
is the orthogonal matrix whose columns are the eigenvectors
. Thus
The function stores the real orthogonal matrix
in a complex array, so that it may also be used to compute all the eigenvalues and eigenvectors of a complex Hermitian matrix
which has been reduced to tridiagonal form
:
In this case, the matrix
must be formed explicitly and passed to nag_zsteqr (f08jsc), which must be called with
. The functions which must be called to perform the reduction to tridiagonal form and form
are:
nag_zsteqr (f08jsc) uses the implicitly shifted
algorithm, switching between the
and
variants in order to handle graded matrices effectively (see
Greenbaum and Dongarra (1980)). The eigenvectors are normalized so that
, but are determined only to within a complex factor of absolute value
.
If only the eigenvalues of
are required, it is more efficient to call
nag_dsterf (f08jfc) instead. If
is positive definite, small eigenvalues can be computed more accurately by
nag_zpteqr (f08juc).
4 References
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Greenbaum A and Dongarra J J (1980) Experiments with QR/QL methods for the symmetric triangular eigenproblem LAPACK Working Note No. 17 (Technical Report CS-89-92) University of Tennessee, Knoxville
Parlett B N (1998) The Symmetric Eigenvalue Problem SIAM, Philadelphia
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:
compz – Nag_ComputeZTypeInput
-
On entry: indicates whether the
eigenvectors
are to be computed.
- Only the eigenvalues
are computed (and the array z is not referenced).
- The
eigenvalues and eigenvectors of are computed (and the array z is initialized by the function).
- The
eigenvalues and eigenvectors
of are computed (and the array z must contain the matrix on entry).
Constraint:
, or .
- 3:
n – IntegerInput
-
On entry:
, the order of the matrix .
Constraint:
.
- 4:
d[] – doubleInput/Output
-
Note: the dimension,
dim, of the array
d
must be at least
.
On entry: the diagonal elements of the tridiagonal matrix .
On exit: the
eigenvalues in ascending order, unless
NE_CONVERGENCE (in which case see
Section 6).
- 5:
e[] – doubleInput/Output
-
Note: the dimension,
dim, of the array
e
must be at least
.
On entry: the off-diagonal elements of the tridiagonal matrix .
On exit:
e is overwritten.
- 6:
z[] – ComplexInput/Output
-
Note: the dimension,
dim, of the array
z
must be at least
- when
or and
;
- when
or and
;
- when
.
The
th element of the matrix
is stored in
- when ;
- when .
On entry: if
,
z must contain the
unitary
matrix
from the reduction to tridiagonal form.
If
,
z need not be set.
On exit: if
or
, the
required orthonormal eigenvectors stored as columns of
; the
th column corresponds to the
th eigenvalue, where
, unless
NE_CONVERGENCE.
If
,
z is not referenced.
- 7:
pdz – IntegerInput
-
On entry: the stride separating row or column elements (depending on the value of
order) in the array
z.
Constraints:
- if ,
- if or , ;
- if , ;
- if ,
- if or ,
;
- if ,
.
- 8:
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_CONVERGENCE
The algorithm has failed to find all the eigenvalues after a total of
iterations. In this case,
d and
e contain on exit the diagonal and off-diagonal elements, respectively, of a tridiagonal matrix
similar to
.
off-diagonal elements have not converged to zero.
- NE_ENUM_INT_2
On entry, , and .
Constraint: if or , ;
if , .
On entry, , , .
Constraint: if or ,
;
if ,
.
- NE_INT
On entry, .
Constraint: .
On entry, .
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
The computed eigenvalues and eigenvectors are exact for a nearby matrix
, where
and
is the
machine precision.
If
is an exact eigenvalue and
is the corresponding computed value, then
where
is a modestly increasing function of
.
If
is the corresponding exact eigenvector, and
is the corresponding computed eigenvector, then the angle
between them is bounded as follows:
Thus the accuracy of a computed eigenvector depends on the gap between its eigenvalue and all the other eigenvalues.
The total number of real floating point operations is typically about if and about if or , but depends on how rapidly the algorithm converges. When , the operations are all performed in scalar mode; the additional operations to compute the eigenvectors when or can be vectorized and on some machines may be performed much faster.
The real analogue of this function is
nag_dsteqr (f08jec).
9 Example
See Section 9 in
nag_zungtr (f08ftc),
nag_zupgtr (f08gtc) or
nag_zhbtrd (f08hsc), which illustrate the use of this function to compute the eigenvalues and eigenvectors of a full or band Hermitian matrix.