3 Description

nag_dtgsna (f08ylc) estimates condition numbers for specified eigenvalues and/or right eigenvectors of an n by n matrix pair S,T in real generalized Schur form. The function actually returns estimates of the reciprocals of the condition numbers in order to avoid possible overflow.

The pair S,T are in real generalized Schur form if S is block upper triangular with 1 by 1 and 2 by 2 diagonal blocks and T is upper triangular as returned, for example, by nag_dgges (f08xac), or nag_dhgeqz (f08xec) with job=Nag_Schur. The diagonal elements, or blocks, define the generalized eigenvalues αi,βi, for i=1,2,…,n, of the pair S,T and the eigenvalues are given by

λi=αi/βi,

so that

βiSxi=αiTxi or Sxi=λiTxi,

where xi is the corresponding (right) eigenvector.

If S and T are the result of a generalized Schur factorization of a matrix pair A,B

A=QSZT, B=QTZT

then the eigenvalues and condition numbers of the pair S,T are the same as those of the pair A,B.

Let α,β≠0,0 be a simple generalized eigenvalue of A,B. Then the reciprocal of the condition number of the eigenvalue λ=α/β is defined as

sλ=yTAx2+yTBx21/2x2y2,

where x and y are the right and left eigenvectors of A,B corresponding to λ. If both α and β are zero, then A,B is singular and sλ=-1 is returned.

The definition of the reciprocal of the estimated condition number of the right eigenvector x and the left eigenvector y corresponding to the simple eigenvalue λ depends upon whether λ is a real eigenvalue, or one of a complex conjugate pair.

If the eigenvalue λ is real and U and V are orthogonal transformations such that

UTA,BV=S,T=α*0S22β*0T22,

where S22 and T22 are n-1 by n-1 matrices, then the reciprocal condition number is given by

Difx≡Dify=Difα,β,S22,T22=σminZ,

where σminZ denotes the smallest singular value of the 2n-1 by 2n-1 matrix

Z=α⊗I-1⊗S22β⊗I-1⊗T22

and ⊗ is the Kronecker product.

If λ is part of a complex conjugate pair and U and V are orthogonal transformations such that

UTA,BV=S,T=S11*0S22T11*0T22,

where S11 and T11 are two by two matrices, S22 and T22 are n-2 by n-2 matrices, and S11,T11 corresponds to the complex conjugate eigenvalue pair λ, λ-, then there exist unitary matrices U1 and V1 such that

U1HS11V1=s11s120s22 and U1HT11V1=t11t120t22.

The eigenvalues are given by λ=s11/t11 and λ-=s22/t22. Then the Frobenius norm-based, estimated reciprocal condition number is bounded by

Difx≡Dify≤mind1,max1,Res11/Res22,d2

where Rez denotes the real part of z, d1=Difs11,t11,s22,t22=σminZ1, Z1 is the complex two by two matrix

Z1=s11-s22t11-t22,

and d2 is an upper bound on DifS11,T11,S22,T22; i.e., an upper bound on σminZ2, where Z2 is the 2n-2 by 2n-2 matrix

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 order=Nag_RowMajor. See Section 3.2.1.3 in the Essential Introduction for a more detailed explanation of the use of this argument.

On entry: specifies the eigenpairs for which condition numbers are to be computed if howmny=Nag_ComputeSelected. To select condition numbers for the eigenpair corresponding to the real eigenvalue λj, select[j-1] must be set Nag_TRUE. To select condition numbers corresponding to a complex conjugate pair of eigenvalues λj and λj+1, select[j-1] and/or select[j] must be set to Nag_TRUE.

max1,pdvl×mm when
job=Nag_EigVals or Nag_DoBoth and
order=Nag_ColMajor;

max1,n×pdvl when
job=Nag_EigVals or Nag_DoBoth and
order=Nag_RowMajor;

1 otherwise.

The i,jth element of the matrix is stored in

vl[j-1×pdvl+i-1] when order=Nag_ColMajor;

vl[i-1×pdvl+j-1] when order=Nag_RowMajor.

On entry: if job=Nag_EigVals or Nag_DoBoth, vl must contain left eigenvectors of S,T, corresponding to the eigenpairs specified by howmny and select. The eigenvectors must be stored in consecutive columns of vl, as returned by
nag_dggev (f08wac) or nag_dtgevc (f08ykc).

max1,pdvr×mm when
job=Nag_EigVals or Nag_DoBoth and
order=Nag_ColMajor;

max1,n×pdvr when
job=Nag_EigVals or Nag_DoBoth and
order=Nag_RowMajor;

1 otherwise.

The i,jth element of the matrix is stored in

vr[j-1×pdvr+i-1] when order=Nag_ColMajor;

vr[i-1×pdvr+j-1] when order=Nag_RowMajor.

On entry: if job=Nag_EigVals or Nag_DoBoth, vr must contain right eigenvectors of S,T, corresponding to the eigenpairs specified by howmny and select. The eigenvectors must be stored in consecutive columns of vr, as returned by
nag_dggev (f08wac) or nag_dtgevc (f08ykc).

On exit: if job=Nag_EigVals or Nag_DoBoth, the reciprocal condition numbers of the selected eigenvalues, stored in consecutive elements of the array. For a complex conjugate pair of eigenvalues two consecutive elements of s are set to the same value. Thus s[j-1], dif[j-1], and the jth columns of VL and VR all correspond to the same eigenpair (but not in general the jth eigenpair, unless all eigenpairs are selected).

On exit: if job=Nag_EigVecs or Nag_DoBoth, the estimated reciprocal condition numbers of the selected eigenvectors, stored in consecutive elements of the array. For a complex eigenvector two consecutive elements of dif are set to the same value. If the eigenvalues cannot be reordered to compute dif[j-1], dif[j-1] is set to 0; this can only occur when the true value would be very small anyway.

On exit: the number of elements of the arrays s and dif used to store the specified condition numbers; for each selected real eigenvalue one element is used, and for each selected complex conjugate pair of eigenvalues, two elements are used. If howmny=Nag_ComputeAll, m is set to n.