Previous: zhetrs Up: ../lapack-z.html Next: zhpcon
NAME ZHGEQZ - 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 ZHGEQZ( 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 DOUBLE PRECISION RWORK( * ) COMPLEX*16 A( LDA, * ), ALPHA( * ), B( LDB, * ), BETA( * ), Q( LDQ, * ), WORK( * ), Z( LDZ, * ) PURPOSE ZHGEQZ 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*16 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*16 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*16 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*16 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*16 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*16 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*16 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) DOUBLE PRECISION 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.