NAG Library Function Document
nag_dsteqr (f08jec)
1 Purpose
nag_dsteqr (f08jec) computes all the eigenvalues and, optionally, all the eigenvectors of a real symmetric tridiagonal matrix, or of a real symmetric matrix which has been reduced to tridiagonal form.
2 Specification
| #include <nag.h> |
| #include <nagf08.h> |
| void |
nag_dsteqr (Nag_OrderType order,
Nag_ComputeZType compz,
Integer n,
double d[],
double e[],
double z[],
Integer pdz,
NagError *fail) |
|
3 Description
nag_dsteqr (f08jec) 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 may also be used to compute all the eigenvalues and eigenvectors of a real symmetric matrix
which has been reduced to tridiagonal form
:
In this case, the matrix
must be formed explicitly and passed to nag_dsteqr (f08jec), which must be called with
. The functions which must be called to perform the reduction to tridiagonal form and form
are:
nag_dsteqr (f08jec) 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 factor
.
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_dpteqr (f08jgc).
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[] – doubleInput/Output
-
Note: the dimension,
dim, of the array
z
must be at least
when
or Nag_InitZ.
The
th element of the matrix
is stored in
- when ;
- when .
On entry: if
,
z must contain the orthogonal matrix
from the reduction to tridiagonal form. If
,
z must be allocated, but its contents need not be set. If
,
z is not referenced and may be a null pointer, i.e.,
(double *) 0.
On exit: if
or
, the
required orthonormal eigenvectors stored as columns of
; the
th column corresponds to the
th eigenvalue, where
,
unless
.
z is not changed if
.
- 7:
pdz – IntegerInput
-
On entry: when
z is a null pointer then
pdz should be set to
.
Constraints:
- if , ;
- if or , .
- 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 , ;
if or , .
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 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 complex analogue of this function is
nag_zsteqr (f08jsc).
9 Example
This example computes all the eigenvalues and eigenvectors of the symmetric tridiagonal matrix
, where
See also the examples for
nag_dorgtr (f08ffc),
nag_dopgtr (f08gfc) or
nag_dsbtrd (f08hec), which illustrate the use of this function to compute the eigenvalues and eigenvectors of a full or band symmetric matrix.
9.1 Program Text
Program Text (f08jece.c)
9.2 Program Data
Program Data (f08jece.d)
9.3 Program Results
Program Results (f08jece.r)