## AB08MZ

### Normal rank of the transfer-function matrix of a state space model (complex case)

[Specification] [Arguments] [Method] [References] [Comments] [Example]

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
```   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.

 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  and ).

```
```  None
```
Example

Program Text

```  None
```
Program Data
```  None
```
Program Results
```  None
```