Purpose
To compute for a single-input single-output descriptor system, given by the system matrix with complex elements [ D C ] [ B A - s*E ], with E nonsingular, a reduced system matrix, [ d c ] [ b a - s*e ], such that d has a "sufficiently" large magnitude.Specification
SUBROUTINE TG01OZ( JOBE, N, DCBA, LDDCBA, E, LDE, NZ, G, TOL, $ ZWORK, LZWORK, INFO ) C .. Scalar Arguments .. CHARACTER JOBE INTEGER INFO, LDDCBA, LDE, LZWORK, N, NZ DOUBLE PRECISION TOL COMPLEX*16 G C .. Array Arguments .. COMPLEX*16 DCBA(LDDCBA,*), E(LDE,*), ZWORK(*)Arguments
Mode Parameters
JOBE CHARACTER*1 Specifies whether E is a general or an identity matrix, as follows: = 'G': The matrix E is a general matrix; = 'I': The matrix E is assumed identity and is not given.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. DCBA (input/output) COMPLEX*16 array, dimension (LDDCBA,N+1) On entry, the leading (N+1)-by-(N+1) part of this array must contain the original system matrices A, B, C, and D, stored as follows [ D C ] [ B A ]. On exit, the leading (NZ+1)-by-(NZ+1) part of this array contains the reduced system matrices a, b, c, and d. LDDCBA INTEGER The leading dimension of the array DCBA. LDDCBA >= N+1. E (input/output) COMPLEX*16 array, dimension (LDE,*) On entry, if JOBE = 'G', the leading N-by-N part of this array must contain the nonsingular descriptor matrix E. On exit, if JOBE = 'G', the leading NZ-by-NZ part of this array contains the reduced descriptor matrix e. If JOBE = 'I', this array is not referenced. LDE INTEGER The leading dimension of the array E. LDE >= MAX(1,N), if JOBE = 'G'; LDE >= 1, if JOBE = 'I'. NZ (output) INTEGER The order of the reduced system. G (output) COMPLEX*16 The gain of the reduced system.Tolerances
TOL DOUBLE PRECISION The tolerance to be used in determining if the transformed d has a "sufficiently" large magnitude. If the user sets TOL > 0, then the given value of TOL is used. If the user sets TOL <= 0, then an implicitly computed, default tolerance, defined by TOLDEF = EPS**(3/4), is used instead, where EPS is the machine precision (see LAPACK Library routine DLAMCH).Workspace
ZWORK COMPLEX*16 array, dimension (LZWORK) On exit, if INFO = 0, ZWORK(1) returns the optimal value of LZWORK. On exit, if INFO = -11, ZWORK(1) returns the minimum value of LZWORK. LZWORK INTEGER The length of the array ZWORK. LZWORK >= 2*N+1, if JOBE = 'G'; LZWORK >= N+1, if JOBE = 'I'. For good performance when JOBE = 'G', LZWORK should be larger. Specifically, LZWORK >= MAX( N*NB(ZGEQRF), (N+1)*NB(ZUNMQR) ), where NB(X) is the optimal block sizes for the LAPACK Library routine X. If LZWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the ZWORK array, returns this value as the first entry of the ZWORK array, and no error message related to LZWORK is issued by XERBLA.Error Indicator
INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.Method
Householder transformations and Givens rotations are used to process the matrices. If E is a general matrix, it is first triangularized using the QR decomposition, and the triangular form is preserved during the remaining computations.Numerical Aspects
The algorithm is numerically backward stable.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None