PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_lapack_zsteqr (f08js)
Purpose
nag_lapack_zsteqr (f08js) computes all the eigenvalues and, optionally, all the eigenvectors of a complex Hermitian matrix which has been reduced to tridiagonal form.
Syntax
Description
nag_lapack_zsteqr (f08js) 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_lapack_zsteqr (f08js), which must be called with
. The functions which must be called to perform the reduction to tridiagonal form and form
are:
nag_lapack_zsteqr (f08js) 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_lapack_dsterf (f08jf) instead. If
is positive definite, small eigenvalues can be computed more accurately by
nag_lapack_zpteqr (f08ju).
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
http://www.netlib.org/lapack/lawnspdf/lawn17.pdf
Parlett B N (1998) The Symmetric Eigenvalue Problem SIAM, Philadelphia
Parameters
Compulsory Input Parameters
- 1:
– string (length ≥ 1)
-
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 must contain the matrix on entry).
- The eigenvalues and eigenvectors of are computed (and the array z is initialized by the function).
Constraint:
, or .
- 2:
– double array
-
The dimension of the array
d
must be at least
The diagonal elements of the tridiagonal matrix .
- 3:
– double array
-
The dimension of the array
e
must be at least
The off-diagonal elements of the tridiagonal matrix .
- 4:
– complex array
-
The first dimension,
, of the array
z must satisfy
- if or , ;
- if , .
The second dimension of the array
z must be at least
if
or
and at least
if
.
If
,
z must contain the unitary matrix
from the reduction to tridiagonal form.
If
,
z need not be set.
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
d and the second dimension of the array
d. (An error is raised if these dimensions are not equal.)
, the order of the matrix .
Constraint:
.
Output Parameters
- 1:
– double array
-
The dimension of the array
d will be
The
eigenvalues in ascending order, unless
(in which case see
Error Indicators and Warnings).
- 2:
– double array
-
The dimension of the array
e will be
- 3:
– complex array
-
The first dimension,
, of the array
z will be
- if or , ;
- if , .
The second dimension of the array
z will be
if
or
and at least
if
.
If
or
, the
required orthonormal eigenvectors stored as columns of
; the
th column corresponds to the
th eigenvalue, where
, unless
.
If
,
z is not referenced.
- 4:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
-
If , parameter had an illegal value on entry. The parameters are numbered as follows:
1:
compz, 2:
n, 3:
d, 4:
e, 5:
z, 6:
ldz, 7:
work, 8:
info.
It is possible that
info refers to a parameter that is omitted from the MATLAB interface. This usually indicates that an error in one of the other input parameters has caused an incorrect value to be inferred.
- W
-
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 unitarily similar to
. If
, then
off-diagonal elements have not converged to zero.
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.
Further Comments
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_lapack_dsteqr (f08je).
Example
See Example in
nag_lapack_zungtr (f08ft),
nag_lapack_zupgtr (f08gt) or
nag_lapack_zhbtrd (f08hs), which illustrate the use of this function to compute the eigenvalues and eigenvectors of a full or band Hermitian matrix.
Open in the MATLAB editor:
f08js_example
function f08js_example
fprintf('f08js example results\n\n');
uplo = 'L';
a = [-2.28 + 0.00i, 0.00 + 0i, 0 + 0i, 0 + 0i;
1.78 + 2.03i, -1.12 + 0i, 0 + 0i, 0 + 0i;
2.26 - 0.10i, 0.01 - 0.43i, -0.37 + 0i, 0 + 0i;
-0.12 - 2.53i, -1.07 - 0.86i, 2.31 + 0.92i, -0.73 + 0i];
[QT, d, e, tau, info] = f08fs( ...
uplo, a);
[Q, info] = f08ft( ...
uplo, QT, tau);
compz = 'V';
[w, ~, z, info] = f08js( ...
compz, d, e, Q);
for i = 1:4
[~,k] = max(abs(real(z(:,i)))+abs(imag(z(:,i))));
z(:,i) = z(:,i)*conj(z(k,i))/abs(z(k,i));
end
disp(' Eigenvalues of A:');
disp(w');
disp(' Corresponding eigenvectors:');
disp(z);
f08js example results
Eigenvalues of A:
-6.0002 -3.0030 0.5036 3.9996
Corresponding eigenvectors:
0.7299 + 0.0000i -0.2120 + 0.1497i 0.1000 - 0.3570i 0.1991 + 0.4720i
-0.1663 - 0.2061i 0.7307 + 0.0000i 0.2863 - 0.3353i -0.2467 + 0.3751i
-0.4165 - 0.1417i -0.3291 + 0.0479i 0.6890 + 0.0000i 0.4468 + 0.1466i
0.1743 + 0.4162i 0.5200 + 0.1329i 0.0662 + 0.4347i 0.5612 + 0.0000i
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015