CHGEQZ(l)		LAPACK routine (version	1.1)		    CHGEQZ(l)

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
  tranformation	(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 unitary transforma-
  tions	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 Generalized	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 gen-
	  eralized 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 conjugate transpose
	  of the unitary tranformation 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 unitary tranforma-
	  tion 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 triangular 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 simultaneously 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 simultaneously 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 eigen-
	  values.

  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 eigen-
	  values.  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 over-
  flow.


Back to the listing of computational routines for eigenvalue problems