Purpose
To compute for a single-input single-output descriptor system, (A, E, B, C), with E upper triangular, a transformed system, (Q'*A*Z, Q'*E*Z, Q'*B, C*Z), via an orthogonal equivalence transformation, so that Q'*B has only the first element nonzero and Q'*E*Z remains upper triangular.Specification
SUBROUTINE TG01KZ( JOBE, COMPC, COMPQ, COMPZ, N, A, LDA, E, LDE,
$ B, C, INCC, Q, LDQ, Z, LDZ, INFO )
C .. Scalar Arguments ..
CHARACTER COMPC, COMPQ, COMPZ, JOBE
INTEGER INCC, INFO, LDA, LDE, LDQ, LDZ, N
C .. Array Arguments ..
COMPLEX*16 A(LDA,*), B(*), C(*), E(LDE,*), Q(LDQ,*),
$ Z(LDZ,*)
Arguments
Mode Parameters
JOBE CHARACTER*1
Specifies whether E is an upper triangular or an identity
matrix, as follows:
= 'U': The matrix E is an upper triangular matrix;
= 'I': The matrix E is assumed identity and is not given.
COMPC CHARACTER*1
Indicates whether the user wishes to transform the system
output matrix C, as follows:
= 'C': Transform the system output matrix C;
= 'N': Do not transform the system output matrix C.
COMPQ CHARACTER*1
Indicates whether the user wishes to accumulate in a
matrix Q the orthogonal row transformations, as follows:
= 'N': Do not form Q;
= 'I': Q is initialized to the unit matrix and the
orthogonal transformation matrix Q is returned;
= 'U': The given matrix Q is updated by the orthogonal
transformations used.
COMPZ CHARACTER*1
Indicates whether the user wishes to accumulate in a
matrix Z the orthogonal column transformations, as
follows:
= 'N': Do not form Z;
= 'I': Z is initialized to the unit matrix and the
orthogonal transformation matrix Z is returned;
= 'U': The given matrix Z is updated by the orthogonal
transformations used.
Input/Output Parameters
N (input) INTEGER
The dimension of the descriptor state vector; also the
order of square matrices A and E, the number of rows of
matrix B, and the number of columns of matrix C. N >= 0.
A (input/output) COMPLEX*16 array, dimension (LDA,N)
On entry, the leading N-by-N part of this array must
contain the original state matrix A.
On exit, the leading N-by-N part of this array contains
the transformed state matrix Q'*A*Z.
LDA INTEGER
The leading dimension of the array A. LDA >= MAX(1,N).
E (input/output) COMPLEX*16 array, dimension (LDE,*)
On entry, if JOBE = 'U', the leading N-by-N upper
triangular part of this array must contain the upper
triangular part of the descriptor matrix E. The lower
triangular part under the first subdiagonal is not
referenced.
On exit, if JOBE = 'U', the leading N-by-N upper
triangular part of this array contains the upper
triangular part of the transformed descriptor matrix,
Q'*E*Z.
If JOBE = 'I', this array is not referenced.
LDE INTEGER
The leading dimension of the array E.
LDE >= MAX(1,N), if JOBE = 'U';
LDE >= 1, if JOBE = 'I'.
B (input/output) COMPLEX*16 array, dimension (N)
On entry, the leading N part of this array must contain
the original input matrix B.
On exit, the leading N part of this array contains the
transformed input matrix Q'*B with all elements but the
first set to zero.
C (input/output) COMPLEX*16 array, dimension
((N-1)*INCC+1)
On entry, if COMPC = 'C', the elements 1, INCC+1, ...,
(N-1)*INCC+1 of this array must contain the original
output vector C.
On exit, if COMPC = 'C', the elements 1, INCC+1, ...,
(N-1)*INCC+1 of this array contain the transformed output
vector C*Z.
If COMPC = 'N', this array is not referenced.
INCC INTEGER
If COMPC = 'C', the increment between successive values
of C. INCC > 0.
If COMPC = 'N', INCC is not used.
Q (input/output) COMPLEX*16 array, dimension (LDQ,*)
On entry, if COMPQ = 'U', the leading N-by-N part of this
array must contain the given matrix Q1. Otherwise, this
array need not be set on input.
On exit, if COMPU <> 'N', the leading N-by-N part of this
array contains the orthogonal transformation matrix used
(Q1*Q if COMPQ = 'U').
If COMPQ = 'N', this array is not referenced.
LDQ INTEGER
The leading dimension of the array Q.
LDQ >= 1, if COMPQ = 'N';
LDQ >= max(1,N), if COMPQ <> 'N'.
Z (input/output) COMPLEX*16 array, dimension (LDZ,*)
On entry, if COMPZ = 'U', the leading N-by-N part of this
array must contain the given matrix Z1. Otherwise, this
array need not be set on input.
On exit, if COMPZ <> 'N', the leading N-by-N part of this
array contains the orthogonal transformation matrix used
(Z1*Z if COMPZ = 'U').
If COMPZ = 'N', this array is not referenced.
LDZ INTEGER
The leading dimension of the array Z.
LDZ >= 1, if COMPZ = 'N';
LDZ >= max(1,N), if COMPZ <> 'N'.
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
Method
Givens rotations are used to annihilate the last N-1 elements of B in reverse order, but preserve the form of E.Numerical Aspects
The algorithm is numerically backward stable.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None