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.