Purpose
To compute for a single-input single-output descriptor system,
given by the system matrix
[ 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 TG01OD( JOBE, N, DCBA, LDDCBA, E, LDE, NZ, G, TOL,
$ DWORK, LDWORK, INFO )
C .. Scalar Arguments ..
CHARACTER JOBE
INTEGER INFO, LDDCBA, LDWORK, LDE, N, NZ
DOUBLE PRECISION G, TOL
C .. Array Arguments ..
DOUBLE PRECISION DCBA(LDDCBA,*), DWORK(*), E(LDE,*)
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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION
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
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal value
of LDWORK.
On exit, if INFO = -11, DWORK(1) returns the minimum value
of LDWORK.
LDWORK INTEGER
The length of the array DWORK.
LDWORK >= 2*N+1, if JOBE = 'G';
LDWORK >= N+1, if JOBE = 'I'.
For good performance when JOBE = 'G', LDWORK should be
larger. Specifically,
LDWORK >= MAX( N*NB(DGEQRF), (N+1)*NB(DORMQR) ),
where NB(X) is the optimal block sizes for the LAPACK
Library routine X.
If LDWORK = -1, then a workspace query is assumed;
the routine only calculates the optimal size of the
DWORK array, returns this value as the first entry of
the DWORK array, and no error message related to LDWORK
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