NAG FL Interface
f08jxf (zstein)
1
Purpose
f08jxf computes the eigenvectors of a real symmetric tridiagonal matrix corresponding to specified eigenvalues, by inverse iteration, storing the eigenvectors in a complex array.
2
Specification
Fortran Interface
Subroutine f08jxf ( |
n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifailv, info) |
Integer, Intent (In) |
:: |
n, m, iblock(*), isplit(*), ldz |
Integer, Intent (Out) |
:: |
iwork(n), ifailv(m), info |
Real (Kind=nag_wp), Intent (In) |
:: |
d(*), e(*), w(*) |
Real (Kind=nag_wp), Intent (Out) |
:: |
work(5*n) |
Complex (Kind=nag_wp), Intent (Inout) |
:: |
z(ldz,*) |
|
C Header Interface
#include <nag.h>
void |
f08jxf_ (const Integer *n, const double d[], const double e[], const Integer *m, const double w[], const Integer iblock[], const Integer isplit[], Complex z[], const Integer *ldz, double work[], Integer iwork[], Integer ifailv[], Integer *info) |
|
C++ Header Interface
#include <nag.h> extern "C" {
void |
f08jxf_ (const Integer &n, const double d[], const double e[], const Integer &m, const double w[], const Integer iblock[], const Integer isplit[], Complex z[], const Integer &ldz, double work[], Integer iwork[], Integer ifailv[], Integer &info) |
}
|
The routine may be called by the names f08jxf, nagf_lapackeig_zstein or its LAPACK name zstein.
3
Description
f08jxf computes the eigenvectors of a real symmetric tridiagonal matrix
corresponding to specified eigenvalues, by inverse iteration (see
Jessup and Ipsen (1992)). It is designed to be used in particular after the specified eigenvalues have been computed by
f08jjf with
, but may also be used when the eigenvalues have been computed by other routines in
Chapters F02 or
F08.
The eigenvectors of
are real, but are stored by this routine in a complex array. If
has been formed by reduction of a full complex Hermitian matrix
to tridiagonal form, then eigenvectors of
may be transformed to (complex) eigenvectors of
by a call to
f08fuf or
f08guf.
f08jjf determines whether the matrix
splits into block diagonal form:
and passes details of the block structure to this routine in the arrays
iblock and
isplit. This routine can then take advantage of the block structure by performing inverse iteration on each block
separately, which is more efficient than using the whole matrix.
4
References
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore
Jessup E and Ipsen I C F (1992) Improving the accuracy of inverse iteration SIAM J. Sci. Statist. Comput. 13 550–572
5
Arguments
-
1:
– Integer
Input
-
On entry: , the order of the matrix .
Constraint:
.
-
2:
– Real (Kind=nag_wp) array
Input
-
Note: the dimension of the array
d
must be at least
.
On entry: the diagonal elements of the tridiagonal matrix .
-
3:
– Real (Kind=nag_wp) array
Input
-
Note: the dimension of the array
e
must be at least
.
On entry: the off-diagonal elements of the tridiagonal matrix .
-
4:
– Integer
Input
-
On entry: , the number of eigenvectors to be returned.
Constraint:
.
-
5:
– Real (Kind=nag_wp) array
Input
-
Note: the dimension of the array
w
must be at least
.
On entry: the eigenvalues of the tridiagonal matrix
stored in
to
, as returned by
f08jjf with
. Eigenvalues associated with the first sub-matrix must be supplied first, in nondecreasing order; then those associated with the second sub-matrix, again in nondecreasing order; and so on.
Constraint:
if , , for .
-
6:
– Integer array
Input
-
Note: the dimension of the array
iblock
must be at least
.
On entry: the first
elements must contain the sub-matrix indices associated with the specified eigenvalues, as returned by
f08jjf with
. If the eigenvalues were not computed by
f08jjf with
, set
to
, for
.
Constraint:
, for .
-
7:
– Integer array
Input
-
Note: the dimension of the array
isplit
must be at least
.
On entry: the points at which
breaks up into sub-matrices, as returned by
f08jjf with
. If the eigenvalues were not computed by
f08jjf with
, set
to
n.
-
8:
– Complex (Kind=nag_wp) array
Output
-
Note: the second dimension of the array
z
must be at least
.
On exit: the
eigenvectors, stored as columns of
; the
th column corresponds to the
th specified eigenvalue, unless
(in which case see
Section 6).
-
9:
– Integer
Input
-
On entry: the first dimension of the array
z as declared in the (sub)program from which
f08jxf is called.
Constraint:
.
-
10:
– Real (Kind=nag_wp) array
Workspace
-
-
11:
– Integer array
Workspace
-
-
12:
– Integer array
Output
-
On exit: if
, the first
elements of
ifailv contain the indices of any eigenvectors which have failed to converge. The rest of the first
m elements of
ifailv are set to
.
-
13:
– Integer
Output
On exit:
unless the routine detects an error (see
Section 6).
6
Error Indicators and Warnings
If , argument had an illegal value. An explanatory message is output, and execution of the program is terminated.
-
eigenvectors (as indicated by argument
ifailv) each failed to converge in five iterations. The current iterate after five iterations is stored in the corresponding column of
z.
7
Accuracy
Each computed eigenvector
is the exact eigenvector of a nearby matrix
, such that
where
is the
machine precision. Hence the residual is small:
However, a set of eigenvectors computed by this routine may not be orthogonal to so high a degree of accuracy as those computed by
f08jsf.
8
Parallelism and Performance
f08jxf is threaded by NAG for parallel execution in multithreaded implementations of the NAG Library.
f08jxf makes calls to BLAS and/or LAPACK routines, which may be threaded within the vendor library used by this implementation. Consult the documentation for the vendor library for further information.
Please consult the
X06 Chapter Introduction for information on how to control and interrogate the OpenMP environment used within this routine. Please also consult the
Users' Note for your implementation for any additional implementation-specific information.
The real analogue of this routine is
f08jkf.
10
Example
See
Section 10 in
f08fuf.