hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

NAG Toolbox: nag_lapack_dstev (f08ja)

 Contents

    1  Purpose
    2  Syntax
    7  Accuracy
    9  Example

Purpose

nag_lapack_dstev (f08ja) computes all the eigenvalues and, optionally, all the eigenvectors of a real n by n symmetric tridiagonal matrix A.

Syntax

[d, e, z, info] = f08ja(jobz, d, e, 'n', n)
[d, e, z, info] = nag_lapack_dstev(jobz, d, e, 'n', n)

Description

nag_lapack_dstev (f08ja) computes all the eigenvalues and, optionally, all the eigenvectors of A using a combination of the QR and QL algorithms, with an implicit shift.

References

Anderson E, Bai Z, Bischof C, Blackford S, Demmel J, Dongarra J J, Du Croz J J, Greenbaum A, Hammarling S, McKenney A and Sorensen D (1999) LAPACK Users' Guide (3rd Edition) SIAM, Philadelphia http://www.netlib.org/lapack/lug
Golub G H and Van Loan C F (1996) Matrix Computations (3rd Edition) Johns Hopkins University Press, Baltimore

Parameters

Compulsory Input Parameters

1:     jobz – string (length ≥ 1)
Indicates whether eigenvectors are computed.
jobz='N'
Only eigenvalues are computed.
jobz='V'
Eigenvalues and eigenvectors are computed.
Constraint: jobz='N' or 'V'.
2:     d: – double array
The dimension of the array d must be at least max1,n
The n diagonal elements of the tridiagonal matrix A.
3:     e: – double array
The dimension of the array e must be at least max1,n-1
The n-1 subdiagonal elements of the tridiagonal matrix A.

Optional Input Parameters

1:     n int64int32nag_int scalar
Default: the dimension of the array d.
n, the order of the matrix.
Constraint: n0.

Output Parameters

1:     d: – double array
The dimension of the array d will be max1,n
If info=0, the eigenvalues in ascending order.
2:     e: – double array
The dimension of the array e will be max1,n-1
The contents of e are destroyed.
3:     zldz: – double array
The first dimension, ldz, of the array z will be
  • if jobz='V', ldz= max1,n ;
  • otherwise ldz=1.
The second dimension of the array z will be max1,n if jobz='V' and 1 otherwise.
If jobz='V', then if info=0, z contains the orthonormal eigenvectors of the matrix A, with the ith column of Z holding the eigenvector associated with di.
If jobz='N', z is not referenced.
4:     info int64int32nag_int scalar
info=0 unless the function detects an error (see Error Indicators and Warnings).

Error Indicators and Warnings

   info=-i
If info=-i, parameter i had an illegal value on entry. The parameters are numbered as follows:
1: jobz, 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.
   info>0
If info=i, the algorithm failed to converge; i off-diagonal elements of e did not converge to zero.

Accuracy

The computed eigenvalues and eigenvectors are exact for a nearby matrix A+E, where
E2 = Oε A2 ,  
and ε is the machine precision. See Section 4.7 of Anderson et al. (1999) for further details.

Further Comments

The total number of floating-point operations is proportional to n2 if jobz='N' and is proportional to n3 if jobz='V'.

Example

This example finds all the eigenvalues and eigenvectors of the symmetric tridiagonal matrix
A = 1 1 0 0 1 4 2 0 0 2 9 3 0 0 3 16 ,  
together with approximate error bounds for the computed eigenvalues and eigenvectors.
function f08ja_example


fprintf('f08ja example results\n\n');

% Symmetric tridiagonal matrix A stored as main and sub-diagonals
n = int64(4);
d = [1;     4;     9;     16];
e = [1;     2;     3];

% All eigenvalues and eigenvectors of A
jobz = 'Vectors';
[w, ~, z, info] = f08ja( ...
                         jobz, d, e);

% Normalize eigenvectors: largest element positive
for j = 1:n
  [~,k] = max(abs(z(:,j)));
  if z(k,j) < 0;
    z(:,j) = -z(:,j);
  end
end                            

disp('Eigenvalues');
disp(w);
disp('Eigenvectors');
disp(z);

% Eigenvalue error bound
errbnd = x02aj*max(abs(w(1)),abs(w(end)));
% Eigenvector condition numbers
[rcondz, info] = f08fl( ...
		        'Eigenvectors', n, n, w);

% Eigenvector error bounds
zerrbd = errbnd./rcondz;

disp('Error estimate for the eigenvalues');
fprintf('%12.1e\n',errbnd);
disp('Error estimates for the eigenvectors');
fprintf('%12.1e',zerrbd);
fprintf('\n');


f08ja example results

Eigenvalues
    0.6476
    3.5470
    8.6578
   17.1477

Eigenvectors
    0.9396    0.3388    0.0494    0.0034
   -0.3311    0.8628    0.3781    0.0545
    0.0853   -0.3648    0.8558    0.3568
   -0.0167    0.0879   -0.3497    0.9326

Error estimate for the eigenvalues
     1.9e-15
Error estimates for the eigenvectors
     6.6e-16     6.6e-16     3.7e-16     2.2e-16

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015