Previous: ctrcon Up: ../lapack-c.html Next: ctrexc


ctrevc


 NAME
      CTREVC - compute all or some right and/or left eigenvectors
      of a complex upper triangular matrix T

 SYNOPSIS
      SUBROUTINE CTREVC( JOB, HOWMNY, SELECT, N, T, LDT, VL, LDVL,
                         VR, LDVR, MM, M, WORK, RWORK, INFO )

          CHARACTER      HOWMNY, JOB

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

          LOGICAL        SELECT( * )

          REAL           RWORK( * )

          COMPLEX        T( LDT, * ), VL( LDVL, * ), VR( LDVR, *
                         ), WORK( * )

 PURPOSE
      CTREVC computes all or some right and/or left eigenvectors
      of a complex upper triangular matrix T.

      The right eigenvector x and the left eigenvector y of T
      corresponding to an eigenvalue w are defined by:

                   T*x = w*x,     y**H*T = w*y**H.

      The routine may either return the matrices X and/or Y of
      right or left eigenvectors of T, or the products Q*X and/or
      Q*Y, where Q is an input unitary matrix. If T was obtained
      from the Schur factorization of an original matrix A =
      Q*T*Q**H, then Q*X and/or Q*Y are the matrices of right or
      left eigenvectors of A.

 ARGUMENTS
      JOB     (input) CHARACTER*1
              = 'R':  compute right eigenvectors only;
              = 'L':  compute left eigenvectors only;
              = 'B':  compute both right and left eigenvectors.

      HOWMNY  (input) CHARACTER*1
              = 'A':  compute all right and/or left eigenvectors;
              = 'O':  compute all right and/or left eigenvectors,
              multiplied on the left by an input (generally uni-
              tary) matrix; = 'S':  compute some right and/or left
              eigenvectors, specified by the logical array SELECT.

      SELECT  (input) LOGICAL array, dimension (N)
              If HOWMNY = 'S', SELECT specifies the eigenvectors
              to be computed.  To select the eigenvector

              corresponding to the j-th eigenvalue, SELECT(j) must
              be set to .TRUE..  If HOWMNY = 'A' or 'O', SELECT is
              not referenced.

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

      T       (input/output) COMPLEX array, dimension (LDT,N)
              The upper triangular matrix T.  T is modified, but
              restored on exit.

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

      VL      (input/output) COMPLEX array, dimension (LDVL,MM)
              On entry, if JOB = 'L' or 'B' and HOWMNY = 'O', VL
              must contain an N-by-N matrix Q (usually the unitary
              matrix Q of Schur vectors returned by CHSEQR).  On
              exit, if JOB = 'L' or 'B', VL contains: if HOWMNY =
              'A', the matrix Y of left eigenvectors of T; if
              HOWMNY = 'O', the matrix Q*Y; if HOWMNY = 'S', the
              left eigenvectors of T specified by SELECT, stored
              consecutively in the columns of VL, in the same
              order as their eigenvalues.  If JOB = 'R', VL is not
              referenced.

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

      VR      (input/output) COMPLEX array, dimension (LDVR,MM)
              On entry, if JOB = 'R' or 'B' and HOWMNY = 'O', VR
              must contain an N-by-N matrix Q (usually the unitary
              matrix Q of Schur vectors returned by CHSEQR).  On
              exit, if JOB = 'R' or 'B', VR contains: if HOWMNY =
              'A', the matrix X of right eigenvectors of T; if
              HOWMNY = 'O', the matrix Q*X; if HOWMNY = 'S', the
              right eigenvectors of T specified by SELECT, stored
              consecutively in the columns of VR, in the same
              order as their eigenvalues.  If JOB = 'L', VR is not
              referenced.

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

      MM      (input) INTEGER
              The number of columns in the arrays VL and/or VR. MM
              >= M.

      M       (output) INTEGER

              The number of columns in the arrays VL and/or VR
              required to store the eigenvectors. If HOWMNY = 'A'
              or 'O', M is set to N.

      WORK    (workspace) COMPLEX array, dimension (2*N)

      RWORK   (workspace) REAL array, dimension (N)

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

 FURTHER DETAILS
      The algorithm used in this program is basically backward
      (forward) substitution, with scaling to make the code robust
      against possible overflow.

      Each eigenvector is normalized so that the element of larg-
      est magnitude has magnitude 1; here the magnitude of a com-
      plex number (x,y) is taken to be |x| + |y|.