Purpose
To compute equivalence transformation matrices Q and Z which
reduce the regular pole pencil A-lambda*E of the descriptor system
(A-lambda*E,B,C), with (A,E) in a generalized real Schur form, to
the block-diagonal form
( A1 0 ) ( E1 0 )
Q*A*Z = ( ) , Q*E*Z = ( ) , (1)
( 0 A2 ) ( 0 E2 )
where the pair (Q*A*Z,Q*E*Z) is in a generalized real Schur form,
with (A1,E1) and (A2,E2) having no common generalized eigenvalues.
This decomposition corresponds to an additive spectral
decomposition of the transfer-function matrix of the descriptor
system as the sum of two terms containing the generalized
eigenvalues of (A1,E1) and (A2,E2), respectively.
Specification
SUBROUTINE TG01NX( JOBT, N, M, P, NDIM, A, LDA, E, LDE, B, LDB,
$ C, LDC, Q, LDQ, Z, LDZ, IWORK, INFO )
C .. Scalar Arguments ..
CHARACTER JOBT
INTEGER INFO, LDA, LDB, LDC, LDE, LDQ, LDZ, M, N, NDIM,
$ P
C .. Array Arguments ..
INTEGER IWORK(*)
DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*), E(LDE,*),
$ Q(LDQ,*), Z(LDZ,*)
Arguments
Mode Parameters
JOBT CHARACTER*1
= 'D': compute the direct transformation matrices;
= 'I': compute the inverse transformation matrices
inv(Q) and inv(Z).
Input/Output Parameters
N (input) INTEGER
The number of rows of the matrix B, the number of columns
of the matrix C and the order of the square matrices A
and E. N >= 0.
M (input) INTEGER
The number of columns of the matrix B. M >= 0.
P (input) INTEGER
The number of rows of the matrix C. P >= 0.
NDIM (input) INTEGER
The dimension of the leading diagonal blocks of (A,E)
having generalized eigenvalues distinct from those of the
trailing diagonal block. 0 <= NDIM <= N.
A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
On entry, the leading N-by-N part of this array must
contain the N-by-N state matrix A in a real Schur form.
On exit, the leading N-by-N part of this array contains
the transformed state matrix Q*A*Z (if JOBT = 'D') or
inv(Q)*A*inv(Z) (if JOBT = 'I'), in the form (1), where
A1 is a NDIM-by-NDIM matrix.
LDA INTEGER
The leading dimension of the array A. LDA >= MAX(1,N).
E (input/output) DOUBLE PRECISION array, dimension (LDE,N)
On entry, the leading N-by-N part of this array must
contain the N-by-N descriptor matrix E in upper triangular
form.
On exit, the leading N-by-N part of this array contains
the transformed descriptor matrix Q*E*Z (if JOBT = 'D') or
inv(Q)*E*inv(Z) (if JOBT = 'I'), in the form (1), where
E1 is an NDIM-by-NDIM matrix.
LDE INTEGER
The leading dimension of the array E. LDE >= MAX(1,N).
B (input/output) DOUBLE PRECISION array, dimension (LDB,M)
On entry, the leading N-by-M part of this array must
contain the N-by-M input matrix B.
On exit, the leading N-by-M part of this array contains
the transformed input matrix Q*B (if JOBT = 'D') or
inv(Q)*B (if JOBT = 'I').
LDB INTEGER
The leading dimension of the array B. LDB >= MAX(1,N).
C (input/output) DOUBLE PRECISION array, dimension (LDC,N)
On entry, the leading P-by-N part of this array must
contain the state/output matrix C.
On exit, the leading P-by-N part of this array contains
the transformed matrix C*Z (if JOBT = 'D') or C*inv(Z)
(if JOBT = 'I').
LDC INTEGER
The leading dimension of the array C. LDC >= MAX(1,P).
Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N)
On entry, the leading N-by-N part of this array contains
Q1, the orthogonal left transformation matrix Q used to
reduce the pair (A,E) to the generalized real Schur form.
On exit, the leading N-by-N part of this array contains
the left transformation matrix Q = Q2*Q1, if JOBT = 'D',
or its inverse inv(Q), if JOBT = 'I'.
LDQ INTEGER
The leading dimension of the array Q. LDQ >= MAX(1,N).
Z (input/output) DOUBLE PRECISION array, dimension (LDZ,N)
On entry, the leading N-by-N part of this array contains
the orthogonal right transformation matrix Z1 used to
reduce the pair (A,E) to the generalized real Schur form.
On exit, the leading N-by-N part of this array contains
the right transformation matrix Z = Z1*Z2, if JOBT = 'D',
or its inverse inv(Z), if JOBT = 'I'.
LDZ INTEGER
The leading dimension of the array Z. LDZ >= MAX(1,N).
Workspace
IWORK INTEGER array, dimension (N+6)Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
= 1: the separation of the two diagonal blocks failed
because of very close eigenvalues.
Method
For the separation, transformation matrices Q2 and Z2 of the form
( I -X ) ( I Y )
Q2 = ( ) , Z2 = ( )
( 0 I ) ( 0 I )
are determined, such that Q2*A*Z2 and Q2*E*Z2 are block diagonal
as in (1). X and Y are computed by solving generalized Sylvester
equations.
If we partition Q2*B and C*Z2 according to (1) in the form ( B1 )
( B2 )
and ( C1 C2 ), then (A1-lambda*E1,B1,C1) and (A2-lambda*E2,B2,C2)
represent an additive spectral decomposition of the system
transfer-function matrix.
References
[1] Kagstrom, B. and Van Dooren, P.
Additive decomposition of a transfer function with respect
to a specified region.
Proc. MTNS Symp., Brussels, 1989.
Numerical Aspects
The algorithm is numerically backward stable and requires 0( N**3 ) floating point operations.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None