Purpose
To compute the normal rank of the transfer-function matrix of a state-space model (A,B,C,D).Specification
SUBROUTINE AB08MZ( EQUIL, N, M, P, A, LDA, B, LDB, C, LDC, D, LDD,
$ RANK, TOL, IWORK, DWORK, ZWORK, LZWORK, INFO )
C .. Scalar Arguments ..
CHARACTER EQUIL
INTEGER INFO, LDA, LDB, LDC, LDD, LZWORK, M, N, P, RANK
DOUBLE PRECISION TOL
C .. Array Arguments ..
INTEGER IWORK(*)
COMPLEX*16 A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), ZWORK(*)
DOUBLE PRECISION DWORK(*)
Arguments
Mode Parameters
EQUIL CHARACTER*1
Specifies whether the user wishes to balance the compound
matrix (see METHOD) as follows:
= 'S': Perform balancing (scaling);
= 'N': Do not perform balancing.
Input/Output Parameters
N (input) INTEGER
The number of state variables, i.e., the order of the
matrix A. N >= 0.
M (input) INTEGER
The number of system inputs. M >= 0.
P (input) INTEGER
The number of system outputs. P >= 0.
A (input) COMPLEX*16 array, dimension (LDA,N)
The leading N-by-N part of this array must contain the
state dynamics matrix A of the system.
LDA INTEGER
The leading dimension of array A. LDA >= MAX(1,N).
B (input) COMPLEX*16 array, dimension (LDB,M)
The leading N-by-M part of this array must contain the
input/state matrix B of the system.
LDB INTEGER
The leading dimension of array B. LDB >= MAX(1,N).
C (input) COMPLEX*16 array, dimension (LDC,N)
The leading P-by-N part of this array must contain the
state/output matrix C of the system.
LDC INTEGER
The leading dimension of array C. LDC >= MAX(1,P).
D (input) COMPLEX*16 array, dimension (LDD,M)
The leading P-by-M part of this array must contain the
direct transmission matrix D of the system.
LDD INTEGER
The leading dimension of array D. LDD >= MAX(1,P).
RANK (output) INTEGER
The normal rank of the transfer-function matrix.
Tolerances
TOL DOUBLE PRECISION
A tolerance used in rank decisions to determine the
effective rank, which is defined as the order of the
largest leading (or trailing) triangular submatrix in the
QR (or RQ) factorization with column (or row) pivoting
whose estimated condition number is less than 1/TOL.
If the user sets TOL to be less than SQRT((N+P)*(N+M))*EPS
then the tolerance is taken as SQRT((N+P)*(N+M))*EPS,
where EPS is the machine precision (see LAPACK Library
Routine DLAMCH).
Workspace
IWORK INTEGER array, dimension (2*N+MAX(M,P)+1)
DWORK DOUBLE PRECISION array, dimension (2*MAX(M,P))
ZWORK COMPLEX*16 array, dimension (LZWORK)
On exit, if INFO = 0, ZWORK(1) returns the optimal value
of LZWORK.
LZWORK INTEGER
The length of the array ZWORK.
LZWORK >= (N+P)*(N+M) + MAX(MIN(P,M) + MAX(3*M-1,N), 1,
MIN(P,N) + MAX(3*P-1,N+P,N+M))
For optimum performance LZWORK should be larger.
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
The routine reduces the (N+P)-by-(M+N) compound matrix (B A)
(D C)
to one with the same invariant zeros and with D of full row rank.
The normal rank of the transfer-function matrix is the rank of D.
References
[1] Svaricek, F.
Computation of the Structural Invariants of Linear
Multivariable Systems with an Extended Version of
the Program ZEROS.
System & Control Letters, 6, pp. 261-266, 1985.
[2] Emami-Naeini, A. and Van Dooren, P.
Computation of Zeros of Linear Multivariable Systems.
Automatica, 18, pp. 415-430, 1982.
Numerical Aspects
The algorithm is backward stable (see [2] and [1]).Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None
Click here to get a compressed (gzip) tar file containing the source code of the routine, the example program, data, documentation, and related files.
Return to index