NAME

ztrsna - estimate reciprocal condition numbers for specified eigenvalues and/or right eigenvectors of a complex upper triangular matrix T (or of any matrix Q*T*Q**H with Q unitary)


SYNOPSIS

  SUBROUTINE ZTRSNA( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, 
 *      LDVR, S, SEP, MM, M, WORK, LDWORK, WORK1, INFO)
  CHARACTER * 1 JOB, HOWMNY
  DOUBLE COMPLEX T(LDT,*), VL(LDVL,*), VR(LDVR,*), WORK(LDWORK,*)
  INTEGER N, LDT, LDVL, LDVR, MM, M, LDWORK, INFO
  LOGICAL SELECT(*)
  DOUBLE PRECISION S(*), SEP(*), WORK1(*)
  SUBROUTINE ZTRSNA_64( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, 
 *      LDVR, S, SEP, MM, M, WORK, LDWORK, WORK1, INFO)
  CHARACTER * 1 JOB, HOWMNY
  DOUBLE COMPLEX T(LDT,*), VL(LDVL,*), VR(LDVR,*), WORK(LDWORK,*)
  INTEGER*8 N, LDT, LDVL, LDVR, MM, M, LDWORK, INFO
  LOGICAL*8 SELECT(*)
  DOUBLE PRECISION S(*), SEP(*), WORK1(*)

F95 INTERFACE

  SUBROUTINE TRSNA( JOB, HOWMNY, SELECT, [N], T, [LDT], VL, [LDVL], 
 *       VR, [LDVR], S, SEP, MM, M, [WORK], [LDWORK], [WORK1], [INFO])
  CHARACTER(LEN=1) :: JOB, HOWMNY
  COMPLEX(8), DIMENSION(:,:) :: T, VL, VR, WORK
  INTEGER :: N, LDT, LDVL, LDVR, MM, M, LDWORK, INFO
  LOGICAL, DIMENSION(:) :: SELECT
  REAL(8), DIMENSION(:) :: S, SEP, WORK1
  SUBROUTINE TRSNA_64( JOB, HOWMNY, SELECT, [N], T, [LDT], VL, [LDVL], 
 *       VR, [LDVR], S, SEP, MM, M, [WORK], [LDWORK], [WORK1], [INFO])
  CHARACTER(LEN=1) :: JOB, HOWMNY
  COMPLEX(8), DIMENSION(:,:) :: T, VL, VR, WORK
  INTEGER(8) :: N, LDT, LDVL, LDVR, MM, M, LDWORK, INFO
  LOGICAL(8), DIMENSION(:) :: SELECT
  REAL(8), DIMENSION(:) :: S, SEP, WORK1

C INTERFACE

#include <sunperf.h>

void ztrsna(char job, char howmny, logical *select, int n, doublecomplex *t, int ldt, doublecomplex *vl, int ldvl, doublecomplex *vr, int ldvr, double *s, double *sep, int mm, int *m, int ldwork, int *info);

void ztrsna_64(char job, char howmny, logical *select, long n, doublecomplex *t, long ldt, doublecomplex *vl, long ldvl, doublecomplex *vr, long ldvr, double *s, double *sep, long mm, long *m, long ldwork, long *info);


PURPOSE

ztrsna estimates reciprocal condition numbers for specified eigenvalues and/or right eigenvectors of a complex upper triangular matrix T (or of any matrix Q*T*Q**H with Q unitary).


ARGUMENTS


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 transpose 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)

where EPS is the machine precision.

The reciprocal of the condition number of the right eigenvector 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 eigenvector VR(i) is given by

                    EPS * norm(T) / SEP(i)