.TH "tgevc" 3 "Tue Jan 28 2025 00:54:31" "Version 3.12.0" "LAPACK" \" -*- nroff -*-
.ad l
.nh
.SH NAME
tgevc \- tgevc: eigvec of pair of matrices
.SH SYNOPSIS
.br
.PP
.SS "Functions"

.in +1c
.ti -1c
.RI "subroutine \fBctgevc\fP (side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, m, work, rwork, info)"
.br
.RI "\fBCTGEVC\fP "
.ti -1c
.RI "subroutine \fBdtgevc\fP (side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, m, work, info)"
.br
.RI "\fBDTGEVC\fP "
.ti -1c
.RI "subroutine \fBstgevc\fP (side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, m, work, info)"
.br
.RI "\fBSTGEVC\fP "
.ti -1c
.RI "subroutine \fBztgevc\fP (side, howmny, select, n, s, lds, p, ldp, vl, ldvl, vr, ldvr, mm, m, work, rwork, info)"
.br
.RI "\fBZTGEVC\fP "
.in -1c
.SH "Detailed Description"
.PP 

.SH "Function Documentation"
.PP 
.SS "subroutine ctgevc (character side, character howmny, logical, dimension( * ) select, integer n, complex, dimension( lds, * ) s, integer lds, complex, dimension( ldp, * ) p, integer ldp, complex, dimension( ldvl, * ) vl, integer ldvl, complex, dimension( ldvr, * ) vr, integer ldvr, integer mm, integer m, complex, dimension( * ) work, real, dimension( * ) rwork, integer info)"

.PP
\fBCTGEVC\fP  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 CTGEVC computes some or all of the right and/or left eigenvectors of
 a pair of complex matrices (S,P), where S and P are upper triangular\&.
 Matrix pairs of this type are produced by the generalized Schur
 factorization of a complex matrix pair (A,B):

    A = Q*S*Z**H,  B = Q*P*Z**H

 as computed by CGGHRD + CHGEQZ\&.

 The right eigenvector x and the left eigenvector y of (S,P)
 corresponding to an eigenvalue w are defined by:

    S*x = w*P*x,  (y**H)*S = w*(y**H)*P,

 where y**H denotes the conjugate transpose of y\&.
 The eigenvalues are not input to this routine, but are computed
 directly from the diagonal elements of S and P\&.

 This routine returns the matrices X and/or Y of right and left
 eigenvectors of (S,P), or the products Z*X and/or Q*Y,
 where Z and Q are input matrices\&.
 If Q and Z are the unitary factors from the generalized Schur
 factorization of a matrix pair (A,B), then Z*X and Q*Y
 are the matrices of right and left eigenvectors of (A,B)\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'R': compute right eigenvectors only;
          = 'L': compute left eigenvectors only;
          = 'B': compute both right and left eigenvectors\&.
.fi
.PP
.br
\fIHOWMNY\fP 
.PP
.nf
          HOWMNY is CHARACTER*1
          = 'A': compute all right and/or left eigenvectors;
          = 'B': compute all right and/or left eigenvectors,
                 backtransformed by the matrices in VR and/or VL;
          = 'S': compute selected right and/or left eigenvectors,
                 specified by the logical array SELECT\&.
.fi
.PP
.br
\fISELECT\fP 
.PP
.nf
          SELECT is LOGICAL array, dimension (N)
          If HOWMNY='S', SELECT specifies the eigenvectors to be
          computed\&.  The eigenvector corresponding to the j-th
          eigenvalue is computed if SELECT(j) = \&.TRUE\&.\&.
          Not referenced if HOWMNY = 'A' or 'B'\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrices S and P\&.  N >= 0\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is COMPLEX array, dimension (LDS,N)
          The upper triangular matrix S from a generalized Schur
          factorization, as computed by CHGEQZ\&.
.fi
.PP
.br
\fILDS\fP 
.PP
.nf
          LDS is INTEGER
          The leading dimension of array S\&.  LDS >= max(1,N)\&.
.fi
.PP
.br
\fIP\fP 
.PP
.nf
          P is COMPLEX array, dimension (LDP,N)
          The upper triangular matrix P from a generalized Schur
          factorization, as computed by CHGEQZ\&.  P must have real
          diagonal elements\&.
.fi
.PP
.br
\fILDP\fP 
.PP
.nf
          LDP is INTEGER
          The leading dimension of array P\&.  LDP >= max(1,N)\&.
.fi
.PP
.br
\fIVL\fP 
.PP
.nf
          VL is COMPLEX array, dimension (LDVL,MM)
          On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must
          contain an N-by-N matrix Q (usually the unitary matrix Q
          of left Schur vectors returned by CHGEQZ)\&.
          On exit, if SIDE = 'L' or 'B', VL contains:
          if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Q*Y;
          if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VL, in the same order as their eigenvalues\&.
          Not referenced if SIDE = 'R'\&.
.fi
.PP
.br
\fILDVL\fP 
.PP
.nf
          LDVL is INTEGER
          The leading dimension of array VL\&.  LDVL >= 1, and if
          SIDE = 'L' or 'l' or 'B' or 'b', LDVL >= N\&.
.fi
.PP
.br
\fIVR\fP 
.PP
.nf
          VR is COMPLEX array, dimension (LDVR,MM)
          On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
          contain an N-by-N matrix Z (usually the unitary matrix Z
          of right Schur vectors returned by CHGEQZ)\&.
          On exit, if SIDE = 'R' or 'B', VR contains:
          if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Z*X;
          if HOWMNY = 'S', the right eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VR, in the same order as their eigenvalues\&.
          Not referenced if SIDE = 'L'\&.
.fi
.PP
.br
\fILDVR\fP 
.PP
.nf
          LDVR is INTEGER
          The leading dimension of the array VR\&.  LDVR >= 1, and if
          SIDE = 'R' or 'B', LDVR >= N\&.
.fi
.PP
.br
\fIMM\fP 
.PP
.nf
          MM is INTEGER
          The number of columns in the arrays VL and/or VR\&. MM >= M\&.
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of columns in the arrays VL and/or VR actually
          used to store the eigenvectors\&.  If HOWMNY = 'A' or 'B', M
          is set to N\&.  Each selected eigenvector occupies one column\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is COMPLEX array, dimension (2*N)
.fi
.PP
.br
\fIRWORK\fP 
.PP
.nf
          RWORK is REAL array, dimension (2*N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit\&.
          < 0:  if INFO = -i, the i-th argument had an illegal value\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SS "subroutine dtgevc (character side, character howmny, logical, dimension( * ) select, integer n, double precision, dimension( lds, * ) s, integer lds, double precision, dimension( ldp, * ) p, integer ldp, double precision, dimension( ldvl, * ) vl, integer ldvl, double precision, dimension( ldvr, * ) vr, integer ldvr, integer mm, integer m, double precision, dimension( * ) work, integer info)"

.PP
\fBDTGEVC\fP  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 DTGEVC computes some or all of the right and/or left eigenvectors of
 a pair of real matrices (S,P), where S is a quasi-triangular matrix
 and P is upper triangular\&.  Matrix pairs of this type are produced by
 the generalized Schur factorization of a matrix pair (A,B):

    A = Q*S*Z**T,  B = Q*P*Z**T

 as computed by DGGHRD + DHGEQZ\&.

 The right eigenvector x and the left eigenvector y of (S,P)
 corresponding to an eigenvalue w are defined by:

    S*x = w*P*x,  (y**H)*S = w*(y**H)*P,

 where y**H denotes the conjugate transpose of y\&.
 The eigenvalues are not input to this routine, but are computed
 directly from the diagonal blocks of S and P\&.

 This routine returns the matrices X and/or Y of right and left
 eigenvectors of (S,P), or the products Z*X and/or Q*Y,
 where Z and Q are input matrices\&.
 If Q and Z are the orthogonal factors from the generalized Schur
 factorization of a matrix pair (A,B), then Z*X and Q*Y
 are the matrices of right and left eigenvectors of (A,B)\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'R': compute right eigenvectors only;
          = 'L': compute left eigenvectors only;
          = 'B': compute both right and left eigenvectors\&.
.fi
.PP
.br
\fIHOWMNY\fP 
.PP
.nf
          HOWMNY is CHARACTER*1
          = 'A': compute all right and/or left eigenvectors;
          = 'B': compute all right and/or left eigenvectors,
                 backtransformed by the matrices in VR and/or VL;
          = 'S': compute selected right and/or left eigenvectors,
                 specified by the logical array SELECT\&.
.fi
.PP
.br
\fISELECT\fP 
.PP
.nf
          SELECT is LOGICAL array, dimension (N)
          If HOWMNY='S', SELECT specifies the eigenvectors to be
          computed\&.  If w(j) is a real eigenvalue, the corresponding
          real eigenvector is computed if SELECT(j) is \&.TRUE\&.\&.
          If w(j) and w(j+1) are the real and imaginary parts of a
          complex eigenvalue, the corresponding complex eigenvector
          is computed if either SELECT(j) or SELECT(j+1) is \&.TRUE\&.,
          and on exit SELECT(j) is set to \&.TRUE\&. and SELECT(j+1) is
          set to \&.FALSE\&.\&.
          Not referenced if HOWMNY = 'A' or 'B'\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrices S and P\&.  N >= 0\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is DOUBLE PRECISION array, dimension (LDS,N)
          The upper quasi-triangular matrix S from a generalized Schur
          factorization, as computed by DHGEQZ\&.
.fi
.PP
.br
\fILDS\fP 
.PP
.nf
          LDS is INTEGER
          The leading dimension of array S\&.  LDS >= max(1,N)\&.
.fi
.PP
.br
\fIP\fP 
.PP
.nf
          P is DOUBLE PRECISION array, dimension (LDP,N)
          The upper triangular matrix P from a generalized Schur
          factorization, as computed by DHGEQZ\&.
          2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks
          of S must be in positive diagonal form\&.
.fi
.PP
.br
\fILDP\fP 
.PP
.nf
          LDP is INTEGER
          The leading dimension of array P\&.  LDP >= max(1,N)\&.
.fi
.PP
.br
\fIVL\fP 
.PP
.nf
          VL is DOUBLE PRECISION array, dimension (LDVL,MM)
          On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must
          contain an N-by-N matrix Q (usually the orthogonal matrix Q
          of left Schur vectors returned by DHGEQZ)\&.
          On exit, if SIDE = 'L' or 'B', VL contains:
          if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Q*Y;
          if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VL, in the same order as their eigenvalues\&.

          A complex eigenvector corresponding to a complex eigenvalue
          is stored in two consecutive columns, the first holding the
          real part, and the second the imaginary part\&.

          Not referenced if SIDE = 'R'\&.
.fi
.PP
.br
\fILDVL\fP 
.PP
.nf
          LDVL is INTEGER
          The leading dimension of array VL\&.  LDVL >= 1, and if
          SIDE = 'L' or 'B', LDVL >= N\&.
.fi
.PP
.br
\fIVR\fP 
.PP
.nf
          VR is DOUBLE PRECISION array, dimension (LDVR,MM)
          On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
          contain an N-by-N matrix Z (usually the orthogonal matrix Z
          of right Schur vectors returned by DHGEQZ)\&.

          On exit, if SIDE = 'R' or 'B', VR contains:
          if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
          if HOWMNY = 'B' or 'b', the matrix Z*X;
          if HOWMNY = 'S' or 's', the right eigenvectors of (S,P)
                      specified by SELECT, stored consecutively in the
                      columns of VR, in the same order as their
                      eigenvalues\&.

          A complex eigenvector corresponding to a complex eigenvalue
          is stored in two consecutive columns, the first holding the
          real part and the second the imaginary part\&.

          Not referenced if SIDE = 'L'\&.
.fi
.PP
.br
\fILDVR\fP 
.PP
.nf
          LDVR is INTEGER
          The leading dimension of the array VR\&.  LDVR >= 1, and if
          SIDE = 'R' or 'B', LDVR >= N\&.
.fi
.PP
.br
\fIMM\fP 
.PP
.nf
          MM is INTEGER
          The number of columns in the arrays VL and/or VR\&. MM >= M\&.
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of columns in the arrays VL and/or VR actually
          used to store the eigenvectors\&.  If HOWMNY = 'A' or 'B', M
          is set to N\&.  Each selected real eigenvector occupies one
          column and each selected complex eigenvector occupies two
          columns\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is DOUBLE PRECISION array, dimension (6*N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit\&.
          < 0:  if INFO = -i, the i-th argument had an illegal value\&.
          > 0:  the 2-by-2 block (INFO:INFO+1) does not have a complex
                eigenvalue\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  Allocation of workspace:
  ---------- -- ---------

     WORK( j ) = 1-norm of j-th column of A, above the diagonal
     WORK( N+j ) = 1-norm of j-th column of B, above the diagonal
     WORK( 2*N+1:3*N ) = real part of eigenvector
     WORK( 3*N+1:4*N ) = imaginary part of eigenvector
     WORK( 4*N+1:5*N ) = real part of back-transformed eigenvector
     WORK( 5*N+1:6*N ) = imaginary part of back-transformed eigenvector

  Rowwise vs\&. columnwise solution methods:
  ------- --  ---------- -------- -------

  Finding a generalized eigenvector consists basically of solving the
  singular triangular system

   (A - w B) x = 0     (for right) or:   (A - w B)**H y = 0  (for left)

  Consider finding the i-th right eigenvector (assume all eigenvalues
  are real)\&. The equation to be solved is:
       n                   i
  0 = sum  C(j,k) v(k)  = sum  C(j,k) v(k)     for j = i,\&. \&. \&.,1
      k=j                 k=j

  where  C = (A - w B)  (The components v(i+1:n) are 0\&.)

  The 'rowwise' method is:

  (1)  v(i) := 1
  for j = i-1,\&. \&. \&.,1:
                          i
      (2) compute  s = - sum C(j,k) v(k)   and
                        k=j+1

      (3) v(j) := s / C(j,j)

  Step 2 is sometimes called the 'dot product' step, since it is an
  inner product between the j-th row and the portion of the eigenvector
  that has been computed so far\&.

  The 'columnwise' method consists basically in doing the sums
  for all the rows in parallel\&.  As each v(j) is computed, the
  contribution of v(j) times the j-th column of C is added to the
  partial sums\&.  Since FORTRAN arrays are stored columnwise, this has
  the advantage that at each step, the elements of C that are accessed
  are adjacent to one another, whereas with the rowwise method, the
  elements accessed at a step are spaced LDS (and LDP) words apart\&.

  When finding left eigenvectors, the matrix in question is the
  transpose of the one in storage, so the rowwise method then
  actually accesses columns of A and B at each step, and so is the
  preferred method\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine stgevc (character side, character howmny, logical, dimension( * ) select, integer n, real, dimension( lds, * ) s, integer lds, real, dimension( ldp, * ) p, integer ldp, real, dimension( ldvl, * ) vl, integer ldvl, real, dimension( ldvr, * ) vr, integer ldvr, integer mm, integer m, real, dimension( * ) work, integer info)"

.PP
\fBSTGEVC\fP  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 STGEVC computes some or all of the right and/or left eigenvectors of
 a pair of real matrices (S,P), where S is a quasi-triangular matrix
 and P is upper triangular\&.  Matrix pairs of this type are produced by
 the generalized Schur factorization of a matrix pair (A,B):

    A = Q*S*Z**T,  B = Q*P*Z**T

 as computed by SGGHRD + SHGEQZ\&.

 The right eigenvector x and the left eigenvector y of (S,P)
 corresponding to an eigenvalue w are defined by:

    S*x = w*P*x,  (y**H)*S = w*(y**H)*P,

 where y**H denotes the conjugate transpose of y\&.
 The eigenvalues are not input to this routine, but are computed
 directly from the diagonal blocks of S and P\&.

 This routine returns the matrices X and/or Y of right and left
 eigenvectors of (S,P), or the products Z*X and/or Q*Y,
 where Z and Q are input matrices\&.
 If Q and Z are the orthogonal factors from the generalized Schur
 factorization of a matrix pair (A,B), then Z*X and Q*Y
 are the matrices of right and left eigenvectors of (A,B)\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'R': compute right eigenvectors only;
          = 'L': compute left eigenvectors only;
          = 'B': compute both right and left eigenvectors\&.
.fi
.PP
.br
\fIHOWMNY\fP 
.PP
.nf
          HOWMNY is CHARACTER*1
          = 'A': compute all right and/or left eigenvectors;
          = 'B': compute all right and/or left eigenvectors,
                 backtransformed by the matrices in VR and/or VL;
          = 'S': compute selected right and/or left eigenvectors,
                 specified by the logical array SELECT\&.
.fi
.PP
.br
\fISELECT\fP 
.PP
.nf
          SELECT is LOGICAL array, dimension (N)
          If HOWMNY='S', SELECT specifies the eigenvectors to be
          computed\&.  If w(j) is a real eigenvalue, the corresponding
          real eigenvector is computed if SELECT(j) is \&.TRUE\&.\&.
          If w(j) and w(j+1) are the real and imaginary parts of a
          complex eigenvalue, the corresponding complex eigenvector
          is computed if either SELECT(j) or SELECT(j+1) is \&.TRUE\&.,
          and on exit SELECT(j) is set to \&.TRUE\&. and SELECT(j+1) is
          set to \&.FALSE\&.\&.
          Not referenced if HOWMNY = 'A' or 'B'\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrices S and P\&.  N >= 0\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is REAL array, dimension (LDS,N)
          The upper quasi-triangular matrix S from a generalized Schur
          factorization, as computed by SHGEQZ\&.
.fi
.PP
.br
\fILDS\fP 
.PP
.nf
          LDS is INTEGER
          The leading dimension of array S\&.  LDS >= max(1,N)\&.
.fi
.PP
.br
\fIP\fP 
.PP
.nf
          P is REAL array, dimension (LDP,N)
          The upper triangular matrix P from a generalized Schur
          factorization, as computed by SHGEQZ\&.
          2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks
          of S must be in positive diagonal form\&.
.fi
.PP
.br
\fILDP\fP 
.PP
.nf
          LDP is INTEGER
          The leading dimension of array P\&.  LDP >= max(1,N)\&.
.fi
.PP
.br
\fIVL\fP 
.PP
.nf
          VL is REAL array, dimension (LDVL,MM)
          On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must
          contain an N-by-N matrix Q (usually the orthogonal matrix Q
          of left Schur vectors returned by SHGEQZ)\&.
          On exit, if SIDE = 'L' or 'B', VL contains:
          if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Q*Y;
          if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VL, in the same order as their eigenvalues\&.

          A complex eigenvector corresponding to a complex eigenvalue
          is stored in two consecutive columns, the first holding the
          real part, and the second the imaginary part\&.

          Not referenced if SIDE = 'R'\&.
.fi
.PP
.br
\fILDVL\fP 
.PP
.nf
          LDVL is INTEGER
          The leading dimension of array VL\&.  LDVL >= 1, and if
          SIDE = 'L' or 'B', LDVL >= N\&.
.fi
.PP
.br
\fIVR\fP 
.PP
.nf
          VR is REAL array, dimension (LDVR,MM)
          On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
          contain an N-by-N matrix Z (usually the orthogonal matrix Z
          of right Schur vectors returned by SHGEQZ)\&.

          On exit, if SIDE = 'R' or 'B', VR contains:
          if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
          if HOWMNY = 'B' or 'b', the matrix Z*X;
          if HOWMNY = 'S' or 's', the right eigenvectors of (S,P)
                      specified by SELECT, stored consecutively in the
                      columns of VR, in the same order as their
                      eigenvalues\&.

          A complex eigenvector corresponding to a complex eigenvalue
          is stored in two consecutive columns, the first holding the
          real part and the second the imaginary part\&.

          Not referenced if SIDE = 'L'\&.
.fi
.PP
.br
\fILDVR\fP 
.PP
.nf
          LDVR is INTEGER
          The leading dimension of the array VR\&.  LDVR >= 1, and if
          SIDE = 'R' or 'B', LDVR >= N\&.
.fi
.PP
.br
\fIMM\fP 
.PP
.nf
          MM is INTEGER
          The number of columns in the arrays VL and/or VR\&. MM >= M\&.
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of columns in the arrays VL and/or VR actually
          used to store the eigenvectors\&.  If HOWMNY = 'A' or 'B', M
          is set to N\&.  Each selected real eigenvector occupies one
          column and each selected complex eigenvector occupies two
          columns\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is REAL array, dimension (6*N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit\&.
          < 0:  if INFO = -i, the i-th argument had an illegal value\&.
          > 0:  the 2-by-2 block (INFO:INFO+1) does not have a complex
                eigenvalue\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP
\fBFurther Details:\fP
.RS 4

.PP
.nf
  Allocation of workspace:
  ---------- -- ---------

     WORK( j ) = 1-norm of j-th column of A, above the diagonal
     WORK( N+j ) = 1-norm of j-th column of B, above the diagonal
     WORK( 2*N+1:3*N ) = real part of eigenvector
     WORK( 3*N+1:4*N ) = imaginary part of eigenvector
     WORK( 4*N+1:5*N ) = real part of back-transformed eigenvector
     WORK( 5*N+1:6*N ) = imaginary part of back-transformed eigenvector

  Rowwise vs\&. columnwise solution methods:
  ------- --  ---------- -------- -------

  Finding a generalized eigenvector consists basically of solving the
  singular triangular system

   (A - w B) x = 0     (for right) or:   (A - w B)**H y = 0  (for left)

  Consider finding the i-th right eigenvector (assume all eigenvalues
  are real)\&. The equation to be solved is:
       n                   i
  0 = sum  C(j,k) v(k)  = sum  C(j,k) v(k)     for j = i,\&. \&. \&.,1
      k=j                 k=j

  where  C = (A - w B)  (The components v(i+1:n) are 0\&.)

  The 'rowwise' method is:

  (1)  v(i) := 1
  for j = i-1,\&. \&. \&.,1:
                          i
      (2) compute  s = - sum C(j,k) v(k)   and
                        k=j+1

      (3) v(j) := s / C(j,j)

  Step 2 is sometimes called the 'dot product' step, since it is an
  inner product between the j-th row and the portion of the eigenvector
  that has been computed so far\&.

  The 'columnwise' method consists basically in doing the sums
  for all the rows in parallel\&.  As each v(j) is computed, the
  contribution of v(j) times the j-th column of C is added to the
  partial sums\&.  Since FORTRAN arrays are stored columnwise, this has
  the advantage that at each step, the elements of C that are accessed
  are adjacent to one another, whereas with the rowwise method, the
  elements accessed at a step are spaced LDS (and LDP) words apart\&.

  When finding left eigenvectors, the matrix in question is the
  transpose of the one in storage, so the rowwise method then
  actually accesses columns of A and B at each step, and so is the
  preferred method\&.
.fi
.PP
 
.RE
.PP

.SS "subroutine ztgevc (character side, character howmny, logical, dimension( * ) select, integer n, complex*16, dimension( lds, * ) s, integer lds, complex*16, dimension( ldp, * ) p, integer ldp, complex*16, dimension( ldvl, * ) vl, integer ldvl, complex*16, dimension( ldvr, * ) vr, integer ldvr, integer mm, integer m, complex*16, dimension( * ) work, double precision, dimension( * ) rwork, integer info)"

.PP
\fBZTGEVC\fP  
.PP
\fBPurpose:\fP
.RS 4

.PP
.nf
 ZTGEVC computes some or all of the right and/or left eigenvectors of
 a pair of complex matrices (S,P), where S and P are upper triangular\&.
 Matrix pairs of this type are produced by the generalized Schur
 factorization of a complex matrix pair (A,B):

    A = Q*S*Z**H,  B = Q*P*Z**H

 as computed by ZGGHRD + ZHGEQZ\&.

 The right eigenvector x and the left eigenvector y of (S,P)
 corresponding to an eigenvalue w are defined by:

    S*x = w*P*x,  (y**H)*S = w*(y**H)*P,

 where y**H denotes the conjugate transpose of y\&.
 The eigenvalues are not input to this routine, but are computed
 directly from the diagonal elements of S and P\&.

 This routine returns the matrices X and/or Y of right and left
 eigenvectors of (S,P), or the products Z*X and/or Q*Y,
 where Z and Q are input matrices\&.
 If Q and Z are the unitary factors from the generalized Schur
 factorization of a matrix pair (A,B), then Z*X and Q*Y
 are the matrices of right and left eigenvectors of (A,B)\&.
.fi
.PP
 
.RE
.PP
\fBParameters\fP
.RS 4
\fISIDE\fP 
.PP
.nf
          SIDE is CHARACTER*1
          = 'R': compute right eigenvectors only;
          = 'L': compute left eigenvectors only;
          = 'B': compute both right and left eigenvectors\&.
.fi
.PP
.br
\fIHOWMNY\fP 
.PP
.nf
          HOWMNY is CHARACTER*1
          = 'A': compute all right and/or left eigenvectors;
          = 'B': compute all right and/or left eigenvectors,
                 backtransformed by the matrices in VR and/or VL;
          = 'S': compute selected right and/or left eigenvectors,
                 specified by the logical array SELECT\&.
.fi
.PP
.br
\fISELECT\fP 
.PP
.nf
          SELECT is LOGICAL array, dimension (N)
          If HOWMNY='S', SELECT specifies the eigenvectors to be
          computed\&.  The eigenvector corresponding to the j-th
          eigenvalue is computed if SELECT(j) = \&.TRUE\&.\&.
          Not referenced if HOWMNY = 'A' or 'B'\&.
.fi
.PP
.br
\fIN\fP 
.PP
.nf
          N is INTEGER
          The order of the matrices S and P\&.  N >= 0\&.
.fi
.PP
.br
\fIS\fP 
.PP
.nf
          S is COMPLEX*16 array, dimension (LDS,N)
          The upper triangular matrix S from a generalized Schur
          factorization, as computed by ZHGEQZ\&.
.fi
.PP
.br
\fILDS\fP 
.PP
.nf
          LDS is INTEGER
          The leading dimension of array S\&.  LDS >= max(1,N)\&.
.fi
.PP
.br
\fIP\fP 
.PP
.nf
          P is COMPLEX*16 array, dimension (LDP,N)
          The upper triangular matrix P from a generalized Schur
          factorization, as computed by ZHGEQZ\&.  P must have real
          diagonal elements\&.
.fi
.PP
.br
\fILDP\fP 
.PP
.nf
          LDP is INTEGER
          The leading dimension of array P\&.  LDP >= max(1,N)\&.
.fi
.PP
.br
\fIVL\fP 
.PP
.nf
          VL is COMPLEX*16 array, dimension (LDVL,MM)
          On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must
          contain an N-by-N matrix Q (usually the unitary matrix Q
          of left Schur vectors returned by ZHGEQZ)\&.
          On exit, if SIDE = 'L' or 'B', VL contains:
          if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Q*Y;
          if HOWMNY = 'S', the left eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VL, in the same order as their eigenvalues\&.
          Not referenced if SIDE = 'R'\&.
.fi
.PP
.br
\fILDVL\fP 
.PP
.nf
          LDVL is INTEGER
          The leading dimension of array VL\&.  LDVL >= 1, and if
          SIDE = 'L' or 'l' or 'B' or 'b', LDVL >= N\&.
.fi
.PP
.br
\fIVR\fP 
.PP
.nf
          VR is COMPLEX*16 array, dimension (LDVR,MM)
          On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must
          contain an N-by-N matrix Z (usually the unitary matrix Z
          of right Schur vectors returned by ZHGEQZ)\&.
          On exit, if SIDE = 'R' or 'B', VR contains:
          if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P);
          if HOWMNY = 'B', the matrix Z*X;
          if HOWMNY = 'S', the right eigenvectors of (S,P) specified by
                      SELECT, stored consecutively in the columns of
                      VR, in the same order as their eigenvalues\&.
          Not referenced if SIDE = 'L'\&.
.fi
.PP
.br
\fILDVR\fP 
.PP
.nf
          LDVR is INTEGER
          The leading dimension of the array VR\&.  LDVR >= 1, and if
          SIDE = 'R' or 'B', LDVR >= N\&.
.fi
.PP
.br
\fIMM\fP 
.PP
.nf
          MM is INTEGER
          The number of columns in the arrays VL and/or VR\&. MM >= M\&.
.fi
.PP
.br
\fIM\fP 
.PP
.nf
          M is INTEGER
          The number of columns in the arrays VL and/or VR actually
          used to store the eigenvectors\&.  If HOWMNY = 'A' or 'B', M
          is set to N\&.  Each selected eigenvector occupies one column\&.
.fi
.PP
.br
\fIWORK\fP 
.PP
.nf
          WORK is COMPLEX*16 array, dimension (2*N)
.fi
.PP
.br
\fIRWORK\fP 
.PP
.nf
          RWORK is DOUBLE PRECISION array, dimension (2*N)
.fi
.PP
.br
\fIINFO\fP 
.PP
.nf
          INFO is INTEGER
          = 0:  successful exit\&.
          < 0:  if INFO = -i, the i-th argument had an illegal value\&.
.fi
.PP
 
.RE
.PP
\fBAuthor\fP
.RS 4
Univ\&. of Tennessee 
.PP
Univ\&. of California Berkeley 
.PP
Univ\&. of Colorado Denver 
.PP
NAG Ltd\&. 
.RE
.PP

.SH "Author"
.PP 
Generated automatically by Doxygen for LAPACK from the source code\&.