Previous: chetrs Up: ../lapack-c.html Next: chpcon


chgeqz


 NAME
      CHGEQZ - implement a single-shift version of the QZ method
      for finding the generalized eigenvalues
      w(i)=ALPHA(i)/BETA(i) of the equation   det( A - w(i) B ) =
      0  If JOB='S', then the pair (A,B) is simultaneously reduced
      to Schur form (i.e., A and B are both upper triangular)
      using one unitary transformation (usually called Q) on the
      left and another (usually called Z) on the right

 SYNOPSIS
      SUBROUTINE CHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, A, LDA,
                         B, LDB, ALPHA, BETA, Q, LDQ, Z, LDZ,
                         WORK, LWORK, RWORK, INFO )

          CHARACTER      COMPQ, COMPZ, JOB

          INTEGER        IHI, ILO, INFO, LDA, LDB, LDQ, LDZ,
                         LWORK, N

          REAL           RWORK( * )

          COMPLEX        A( LDA, * ), ALPHA( * ), B( LDB, * ),
                         BETA( * ), Q( LDQ, * ), WORK( * ), Z(
                         LDZ, * )

 PURPOSE
      CHGEQZ implements a single-shift version of the QZ method
      for finding the generalized eigenvalues
      w(i)=ALPHA(i)/BETA(i) of the equation A are then
      ALPHA(1),...,ALPHA(N), and of B are BETA(1),...,BETA(N).

      If JOB='S' and COMPQ and COMPZ are 'V' or 'I', then the uni-
      tary transformations used to reduce (A,B) are accumulated
      into the arrays Q and Z s.t.:

           Q(in) A(in) Z(in)* = Q(out) A(out) Z(out)*
           Q(in) B(in) Z(in)* = Q(out) B(out) Z(out)*

      Ref: C.B. Moler & G.W. Stewart, "An Algorithm for General-
      ized Matrix
           Eigenvalue Problems", SIAM J. Numer. Anal., 10(1973),
           pp. 241--256.

 ARGUMENTS
      JOB     (input) CHARACTER*1
              = 'E': compute only ALPHA and BETA.  A and B will
              not necessarily be put into generalized Schur form.
              = 'S': put A and B into generalized Schur form, as
              well as computing ALPHA and BETA.

      COMPQ   (input) CHARACTER*1

              = 'N': do not modify Q.
              = 'V': multiply the array Q on the right by the con-
              jugate transpose of the unitary transformation that
              is applied to the left side of A and B to reduce
              them to Schur form.  = 'I': like COMPQ='V', except
              that Q will be initialized to the identity first.

      COMPZ   (input) CHARACTER*1
              = 'N': do not modify Z.
              = 'V': multiply the array Z on the right by the uni-
              tary transformation that is applied to the right
              side of A and B to reduce them to Schur form.  =
              'I': like COMPZ='V', except that Z will be initial-
              ized to the identity first.

      N       (input) INTEGER
              The number of rows and columns in the matrices A, B,
              Q, and Z.  N must be at least 0.

      ILO     (input) INTEGER
              Columns 1 through ILO-1 are assumed to be in tri-
              angular form already, and will not be modified.  ILO
              must be at least 1.

      IHI     (input) INTEGER
              Rows IHI+1 through N are assumed to be in triangular
              form already, and will not be touched.  IHI may not
              be greater than N.

      A       (input/output) COMPLEX array, dimension (LDA, N)
              On entry, the N x N upper Hessenberg matrix A.
              Entries below the subdiagonal must be zero.  If
              JOB='S', then on exit A and B will have been simul-
              taneously reduced to upper triangular form.  If
              JOB='E', then on exit A will have been destroyed.

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

      B       (input/output) COMPLEX array, dimension (LDB, N)
              On entry, the N x N upper triangular matrix B.
              Entries below the diagonal must be zero.  If
              JOB='S', then on exit A and B will have been simul-
              taneously reduced to upper triangular form.  If
              JOB='E', then on exit B will have been destroyed.

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

      ALPHA   (output) COMPLEX array, dimension (N)

              The diagonal elements of A when the pair (A,B) has
              been reduced to Schur form.  ALPHA(i)/BETA(i)
              i=1,...,N are the generalized eigenvalues.

      BETA    (output) COMPLEX array, dimension (N)
              The diagonal elements of B when the pair (A,B) has
              been reduced to Schur form.  ALPHA(i)/BETA(i)
              i=1,...,N are the generalized eigenvalues.  A and B
              are normalized so that BETA(1),...,BETA(N) are non-
              negative real numbers.

      Q       (input/output) COMPLEX array, dimension (LDQ, N)
              If COMPQ='N', then Q will not be referenced.  If
              COMPQ='V' or 'I', then the conjugate transpose of
              the unitary transformations which are applied to A
              and B on the left will be applied to the array Q on
              the right.

      LDQ     (input) INTEGER
              The leading dimension of the array Q.  LDQ must be
              at least 1.  If COMPQ='V' or 'I', then LDQ must also
              be at least N.

      Z       (input/output) COMPLEX array, dimension (LDZ, N)
              If COMPZ='N', then Z will not be referenced.  If
              COMPZ='V' or 'I', then the unitary transformations
              which are applied to A and B on the right will be
              applied to the array Z on the right.

      LDZ     (input) INTEGER
              The leading dimension of the array Z.  LDZ must be
              at least 1.  If COMPZ='V' or 'I', then LDZ must also
              be at least N.

      WORK    (workspace) COMPLEX array, dimension (LWORK)
              On exit, if INFO is not negative, WORK(1) will be
              set to the optimal size of the array WORK.

      LWORK   (input) INTEGER
              The number of elements in WORK.  It must be at least
              1.

      RWORK   (workspace) REAL array, dimension (N)

      INFO    (output) INTEGER
              < 0: if INFO = -i, the i-th argument had an illegal
              value
              = 0: successful exit.
              = 1,...,N: the QZ iteration did not converge.  (A,B)
              is not in Schur form, but ALPHA(i) and BETA(i),
              i=INFO+1,...,N should be correct.  = N+1,...,2*N:
              the shift calculation failed.  (A,B) is not in Schur

              form, but ALPHA(i) and BETA(i), i=INFO-N+1,...,N
              should be correct.  > 2*N:     various "impossible"
              errors.

 FURTHER DETAILS
      We assume that complex ABS works as long as its value is
      less than overflow.