## AB8NXZ

### Construction of a reduced system (Ar,Br,Cr,Dr), having the same transmission zeros as (A,B,C,D), but with Dr of full row rank (complex case)

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

Purpose

      To extract from the (N+P)-by-(M+N) system
                   ( B  A )
                   ( D  C )
      an (NU+MU)-by-(M+NU) "reduced" system
                   ( B' A')
                   ( D' C')
      having the same transmission zeros but with D' of full row rank.

Specification

          SUBROUTINE AB8NXZ( N, M, P, RO, SIGMA, SVLMAX, ABCD, LDABCD,
         $                   NINFZ, INFZ, KRONL, MU, NU, NKROL, TOL, IWORK,
         $                   DWORK, ZWORK, LZWORK, INFO )
    C     .. Scalar Arguments ..
          INTEGER           INFO, LDABCD, LZWORK, M, MU, N, NINFZ, NKROL,
         $                  NU, P, RO, SIGMA
          DOUBLE PRECISION  SVLMAX, TOL
    C     .. Array Arguments ..
          INTEGER           INFZ(*), IWORK(*), KRONL(*)
          COMPLEX*16        ABCD(LDABCD,*), ZWORK(*)
          DOUBLE PRECISION  DWORK(*)

Arguments

Input/Output Parameters

      N       (input) INTEGER
              The number of state variables.  N >= 0.

      M       (input) INTEGER
              The number of system inputs.  M >= 0.

      P       (input) INTEGER
              The number of system outputs.  P >= 0.

      RO      (input/output) INTEGER
              On entry,
              = P     for the original system;
              = MAX(P-M, 0) for the pertransposed system.
              On exit, RO contains the last computed rank.

      SIGMA   (input/output) INTEGER
              On entry,
              = 0  for the original system;
              = M  for the pertransposed system.
              On exit, SIGMA contains the last computed value sigma in
              the algorithm.

      SVLMAX  (input) DOUBLE PRECISION
              During each reduction step, the rank-revealing QR
              factorization of a matrix stops when the estimated minimum
              singular value is smaller than TOL * MAX(SVLMAX,EMSV),
              where EMSV is the estimated maximum singular value.
              SVLMAX >= 0.

      ABCD    (input/output) COMPLEX*16 array, dimension (LDABCD,M+N)
              On entry, the leading (N+P)-by-(M+N) part of this array
              must contain the compound input matrix of the system.
              On exit, the leading (NU+MU)-by-(M+NU) part of this array
              contains the reduced compound input matrix of the system.

      LDABCD  INTEGER
              The leading dimension of array ABCD.
              LDABCD >= MAX(1,N+P).

      NINFZ   (input/output) INTEGER
              On entry, the currently computed number of infinite zeros.
              It should be initialized to zero on the first call.
              NINFZ >= 0.
              On exit, the number of infinite zeros.

      INFZ    (input/output) INTEGER array, dimension (N)
              On entry, INFZ(i) must contain the current number of
              infinite zeros of degree i, where i = 1,2,...,N, found in
              the previous call(s) of the routine. It should be
              initialized to zero on the first call.
              On exit, INFZ(i) contains the number of infinite zeros of
              degree i, where i = 1,2,...,N.

      KRONL   (input/output) INTEGER array, dimension (N+1)
              On entry, this array must contain the currently computed
              left Kronecker (row) indices found in the previous call(s)
              of the routine. It should be initialized to zero on the
              first call.
              On exit, the leading NKROL elements of this array contain
              the left Kronecker (row) indices.

      MU      (output) INTEGER
              The normal rank of the transfer function matrix of the
              original system.

      NU      (output) INTEGER
              The dimension of the reduced system matrix and the number
              of (finite) invariant zeros if D' is invertible.

      NKROL   (output) INTEGER
              The number of left Kronecker indices.

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.
              NOTE that when SVLMAX > 0, the estimated ranks could be
              less than those defined above (see SVLMAX).

Workspace

      IWORK   INTEGER array, dimension (MAX(M,P))

      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 >= MAX( 1, MIN(P,M) + MAX(3*M-1,N),
                                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.

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.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index