AG8BYZ

Construction of a reduced system with input/output matrix Dr of full row rank, preserving the finite Smith zeros of the descriptor system (complex case)

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

Purpose

  To extract from the (N+P)-by-(M+N) descriptor system pencil

     S(lambda) = ( B   A - lambda*E  )
                 ( D        C        )

  with E nonsingular and upper triangular a
  (NR+PR)-by-(M+NR) "reduced" descriptor system pencil

                        ( Br  Ar-lambda*Er )
           Sr(lambda) = (                  )
                        ( Dr     Cr        )

  having the same finite Smith zeros as the pencil
  S(lambda) but with Dr, a PR-by-M full row rank
  left upper trapezoidal matrix, and Er, an NR-by-NR
  upper triangular nonsingular matrix.

Specification
      SUBROUTINE AG8BYZ( FIRST, N, M, P, SVLMAX, ABCD, LDABCD, E, LDE,
     $                   NR, PR, NINFZ, DINFZ, NKRONL, INFZ, KRONL,
     $                   TOL, IWORK, DWORK, ZWORK, LZWORK, INFO )
C     .. Scalar Arguments ..
      INTEGER            DINFZ, INFO, LDABCD, LDE, LZWORK, M, N, NINFZ,
     $                   NKRONL, NR, P, PR
      DOUBLE PRECISION   SVLMAX, TOL
      LOGICAL            FIRST
C     .. Array Arguments ..
      INTEGER            INFZ( * ), IWORK(*), KRONL( * )
      DOUBLE PRECISION   DWORK( * )
      COMPLEX*16         ABCD( LDABCD, * ), E( LDE, * ), ZWORK( * )

Arguments

Mode Parameters

  FIRST   LOGICAL
          Specifies if AG8BYZ is called first time or it is called
          for an already reduced system, with D full column rank
          with the last M rows in upper triangular form:
          FIRST = .TRUE.,  first time called;
          FIRST = .FALSE., not first time called.

Input/Output Parameters
  N       (input) INTEGER
          The number of rows of matrix B, the number of columns of
          matrix C and the order of square matrices A and E.
          N >= 0.

  M       (input) INTEGER
          The number of columns of matrices B and D.  M >= 0.
          M <= P if FIRST = .FALSE. .

  P       (input) INTEGER
          The number of rows of matrices C and D.  P >= 0.

  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 matrix
                   (  B   A  ) ,
                   (  D   C  )
          where A is an N-by-N matrix, B is an N-by-M matrix,
          C is a P-by-N matrix and D is a P-by-M matrix.
          If FIRST = .FALSE., then D must be a full column
          rank matrix with the last M rows in upper triangular form.
          On exit, the leading (NR+PR)-by-(M+NR) part of ABCD
          contains the reduced compound matrix
                    (  Br  Ar ) ,
                    (  Dr  Cr )
          where Ar is an NR-by-NR matrix, Br is an NR-by-M matrix,
          Cr is a PR-by-NR matrix, Dr is a PR-by-M full row rank
          left upper trapezoidal matrix with the first PR columns
          in upper triangular form.

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

  E       (input/output) COMPLEX*16 array, dimension (LDE,N)
          On entry, the leading N-by-N part of this array must
          contain the upper triangular nonsingular matrix E.
          On exit, the leading NR-by-NR part contains the reduced
          upper triangular nonsingular matrix Er.

  LDE     INTEGER
          The leading dimension of array E.  LDE >= MAX(1,N).

  NR      (output) INTEGER
          The order of the reduced matrices Ar and Er; also the
          number of rows of the reduced matrix Br and the number
          of columns of the reduced matrix Cr.
          If Dr is invertible, NR is also the number of finite
          Smith zeros.

  PR      (output) INTEGER
          The rank of the resulting matrix Dr; also the number of
          rows of reduced matrices Cr and Dr.

  NINFZ   (output) INTEGER
          Number of infinite zeros.  NINFZ = 0 if FIRST = .FALSE. .

  DINFZ   (output) INTEGER
          The maximal multiplicity of infinite zeros.
          DINFZ = 0 if FIRST = .FALSE. .

  NKRONL  (output) INTEGER
          The maximal dimension of left elementary Kronecker blocks.

  INFZ    (output) INTEGER array, dimension (N)
          INFZ(i) contains the number of infinite zeros of
          degree i, where i = 1,2,...,DINFZ.
          INFZ is not referenced if FIRST = .FALSE. .

  KRONL   (output) INTEGER array, dimension (N+1)
          KRONL(i) contains the number of left elementary Kronecker
          blocks of dimension i-by-(i-1), where i = 1,2,...,NKRONL.

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 <= 0, then an implicitly computed,
          default tolerance TOLDEF = (N+P)*(N+M)*EPS,  is used
          instead, where EPS is the machine precision
          (see LAPACK Library routine DLAMCH).
          NOTE that when SVLMAX > 0, the estimated ranks could be
          less than those defined above (see SVLMAX).  TOL <= 1.

Workspace
  IWORK   INTEGER array, dimension (M)
          If FIRST = .FALSE., IWORK is not referenced.

  DWORK   DOUBLE PRECISION array, dimension (LDWORK)
          LDWORK >= 2*MAX(M,P), if FIRST = .TRUE.;
          LDWORK >= 2*P,        if FIRST = .FALSE. .

  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 >= 1, if P = 0; otherwise
          LZWORK >= MAX( 1, N+M-1, MIN(P,M) + MAX(3*M-1,N), 3*P ),
                                          if FIRST = .TRUE.;
          LZWORK >= MAX( 1, N+M-1, 3*P ), if FIRST = .FALSE. .
          The second term is not needed if M = 0.
          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 subroutine is based on the reduction algorithm of [1].

References
  [1] P. Misra, P. Van Dooren and A. Varga.
      Computation of structural invariants of generalized
      state-space systems.
      Automatica, 30, pp. 1921-1936, 1994.

Numerical Aspects
  The algorithm is numerically backward stable and requires
  0( (P+N)*(M+N)*N )  floating point operations.

Further Comments
  The number of infinite zeros is computed as

                DINFZ
     NINFZ =     Sum  (INFZ(i)*i) .
                 i=1
  Note that each infinite zero of multiplicity k corresponds to
  an infinite eigenvalue of multiplicity k+1.
  The multiplicities of the infinite eigenvalues can be determined
  from PR, DINFZ and INFZ(i), i = 1, ..., DINFZ, as follows:

                  DINFZ
  - there are PR - Sum (INFZ(i)) simple infinite eigenvalues;
                   i=1

  - there are INFZ(i) infinite eigenvalues with multiplicity i+1,
    for i = 1, ..., DINFZ.

  The left Kronecker indices are:

  [ 0  0 ...  0  | 1  1  ...  1 |  .... | NKRONL  ...  NKRONL ]
  |<- KRONL(1) ->|<- KRONL(2) ->|       |<-  KRONL(NKRONL)  ->|

Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index