STRSNA  - estimate reciprocal condition numbers for speci­
       fied eigenvalues and/or right eigenvectors of a real upper
       quasi-triangular  matrix T (or of any matrix Q*T*Q**T with
       Q orthogonal)


SYNOPSIS

       SUBROUTINE STRSNA( JOB, HOWMNY, SELECT,  N,  T,  LDT,  VL,
                          LDVL,  VR,  LDVR,  S, SEP, MM, M, WORK,
                          LDWORK, IWORK, INFO )

           CHARACTER      HOWMNY, JOB

           INTEGER        INFO, LDT, LDVL, LDVR, LDWORK, M, MM, N

           LOGICAL        SELECT( * )

           INTEGER        IWORK( * )

           REAL           S(  *  ),  SEP(  *  ), T( LDT, * ), VL(
                          LDVL, * ), VR( LDVR, * ), WORK( LDWORK,
                          * )


PURPOSE

       STRSNA  estimates  reciprocal condition numbers for speci­
       fied eigenvalues and/or right eigenvectors of a real upper
       quasi-triangular  matrix T (or of any matrix Q*T*Q**T with
       Q orthogonal).  T must be  in  Schur  canonical  form  (as
       returned  by SHSEQR), that is, block upper triangular with
       1-by-1 and 2-by-2 diagonal blocks;  each  2-by-2  diagonal
       block has its diagonal elements equal and its off-diagonal
       elements of opposite sign.


ARGUMENTS

       JOB     (input) CHARACTER*1
               Specifies whether condition numbers  are  required
               for eigenvalues (S) or eigenvectors (SEP):
               = 'E': for eigenvalues only (S);
               = 'V': for eigenvectors only (SEP);
               =  'B':  for  both eigenvalues and eigenvectors (S
               and SEP).

       HOWMNY  (input) CHARACTER*1
               = 'A': compute condition numbers  for  all  eigen­
               pairs;
               =  'S':  compute  condition  numbers  for selected
               eigenpairs specified by the array SELECT.

       SELECT  (input) LOGICAL array, dimension (N)
               If HOWMNY = 'S', SELECT specifies  the  eigenpairs
               for  which  condition  numbers  are  required.  To
               select condition numbers for the eigenpair  corre­
               sponding to a real eigenvalue w(j), SELECT(j) must

               responding  to  a complex conjugate pair of eigen­
               values  w(j)  and  w(j+1),  either  SELECT(j)   or
               SELECT(j+1)  or  both,  must be set to .TRUE..  If
               HOWMNY = 'A', SELECT is not referenced.

       N       (input) INTEGER
               The order of the matrix T. N >= 0.

       T       (input) REAL array, dimension (LDT,N)
               The upper  quasi-triangular  matrix  T,  in  Schur
               canonical form.

       LDT     (input) INTEGER
               The  leading  dimension  of  the  array  T. LDT >=
               max(1,N).

       VL      (input) REAL array, dimension (LDVL,M)
               If JOB = 'E' or 'B', VL must contain  left  eigen­
               vectors  of  T (or of any Q*T*Q**T with Q orthogo­
               nal), corresponding to the eigenpairs specified by
               HOWMNY and SELECT. The eigenvectors must be stored
               in consecutive  columns  of  VL,  as  returned  by
               SHSEIN  or STREVC.  If JOB = 'V', VL is not refer­
               enced.

       LDVL    (input) INTEGER
               The leading dimension of the array VL.  LDVL >= 1;
               and if JOB = 'E' or 'B', LDVL >= N.

       VR      (input) REAL array, dimension (LDVR,M)
               If  JOB = 'E' or 'B', VR must contain right eigen­
               vectors of T (or of any Q*T*Q**T with  Q  orthogo­
               nal), corresponding to the eigenpairs specified by
               HOWMNY and SELECT. The eigenvectors must be stored
               in  consecutive  columns  of  VR,  as  returned by
               SHSEIN or STREVC.  If JOB = 'V', VR is not  refer­
               enced.

       LDVR    (input) INTEGER
               The leading dimension of the array VR.  LDVR >= 1;
               and if JOB = 'E' or 'B', LDVR >= N.

       S       (output) REAL array, dimension (MM)
               If JOB = 'E' or 'B', the reciprocal condition num­
               bers  of  the selected eigenvalues, stored in con­
               secutive elements of the array. For a complex con­
               jugate  pair  of  eigenvalues two consecutive ele­
               ments of S are set to the same value.  Thus  S(j),
               SEP(j), and the j-th columns of VL and VR all cor­
               respond to the same eigenpair (but not in  general
               the  j-th  eigenpair,  unless  all  eigenpairs are
               selected).  If JOB = 'V', S is not referenced.

               If JOB = 'V' or 'B', the estimated reciprocal con­
               dition   numbers  of  the  selected  eigenvectors,
               stored in consecutive elements of the array. For a
               complex  eigenvector  two  consecutive elements of
               SEP are set to the same value. If the  eigenvalues
               cannot  be  reordered to compute SEP(j), SEP(j) is
               set to 0; this can only occur when the true  value
               would  be very small anyway.  If JOB = 'E', SEP is
               not referenced.

       MM      (input) INTEGER
               The number of elements in the arrays S (if  JOB  =
               'E'  or  'B') and/or SEP (if JOB = 'V' or 'B'). MM
               >= M.

       M       (output) INTEGER
               The number of elements of the arrays S and/or  SEP
               actually  used  to  store  the estimated condition
               numbers.  If HOWMNY = 'A', M is set to N.

       WORK    (workspace) REAL array, dimension (LDWORK,N+1)
               If JOB = 'E', WORK is not referenced.

       LDWORK  (input) INTEGER
               The leading dimension of the array  WORK.   LDWORK
               >= 1; and if JOB = 'V' or 'B', LDWORK >= N.

       IWORK   (workspace) INTEGER array, dimension (N)
               If JOB = 'E', IWORK is not referenced.

       INFO    (output) INTEGER
               = 0: successful exit
               <  0: if INFO = -i, the i-th argument had an ille­
               gal value


FURTHER DETAILS

       The reciprocal of the condition number  of  an  eigenvalue
       lambda is defined as

               S(lambda) = |v'*u| / (norm(u)*norm(v))

       where  u  and  v  are the right and left eigenvectors of T
       corresponding to lambda; v' denotes  the  conjugate-trans­
       pose  of  v, and norm(u) denotes the Euclidean norm. These
       reciprocal condition numbers always lie between zero (very
       badly conditioned) and one (very well conditioned). If n =
       1, S(lambda) is defined to be 1.

       An approximate error bound for a computed eigenvalue  W(i)
       is given by

                           EPS * norm(T) / S(i)


       The reciprocal of the condition number of the right eigen­
       vector u corresponding to lambda is  defined  as  follows.
       Suppose

                   T = ( lambda  c  )
                       (   0    T22 )

       Then the reciprocal condition number is

               SEP( lambda, T22 ) = sigma-min( T22 - lambda*I )

       where  sigma-min  denotes  the smallest singular value. We
       approximate the smallest singular value by the  reciprocal
       of  an  estimate  of  the one-norm of the inverse of T22 -
       lambda*I. If n = 1, SEP(1) is defined to be abs(T(1,1)).

       An approximate error bound for a computed right  eigenvec­
       tor VR(i) is given by

                           EPS * norm(T) / SEP(i)


Man(1) output converted with man2html