## AB09HY

### Cholesky factors of the controllability and observability Grammians

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

Purpose

      To compute the Cholesky factors Su and Ru of the controllability
      Grammian P = Su*Su' and observability Grammian Q = Ru'*Ru,
      respectively, satisfying

             A*P  + P*A' +  scalec^2*B*B'   = 0,       (1)

             A'*Q + Q*A  +  scaleo^2*Cw'*Cw = 0,       (2)

      where
             Cw = Hw - Bw'*X,
             Hw = inv(Dw)*C,
             Bw = (B*D' + P*C')*inv(Dw'),
             D*D' = Dw*Dw' (Dw upper triangular),

      and, with Aw = A - Bw*Hw, X is the stabilizing solution of the
      Riccati equation

             Aw'*X + X*Aw + Hw'*Hw + X*Bw*Bw'*X = 0.   (3)

      The P-by-M matrix D must have full row rank. Matrix A must be
      stable and in a real Schur form.

Specification

          SUBROUTINE AB09HY( N, M, P, A, LDA, B, LDB, C, LDC, D, LDD,
         $                   SCALEC, SCALEO, S, LDS, R, LDR, IWORK,
         $                   DWORK, LDWORK, BWORK, INFO )
    C     .. Scalar Arguments ..
          INTEGER          INFO, LDA, LDB, LDC, LDD, LDR, LDS, LDWORK, M, N,
         $                 P
          DOUBLE PRECISION SCALEC, SCALEO
    C     .. Array Arguments ..
          INTEGER          IWORK(*)
          DOUBLE PRECISION A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*),
         $                 DWORK(*), R(LDR,*), S(LDS,*)
          LOGICAL          BWORK(*)

Arguments

Input/Output Parameters

      N       (input) INTEGER
              The order of state-space representation, 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.  M >= P >= 0.

      A       (input) DOUBLE PRECISION array, dimension (LDA,N)
              The leading N-by-N part of this array must contain the
              stable state dynamics matrix A in a real Schur canonical
              form.

      LDA     INTEGER
              The leading dimension of array A.  LDA >= MAX(1,N).

      B       (input) DOUBLE PRECISION array, dimension (LDB,M)
              The leading N-by-M part of this array must contain the
              input/state matrix B, corresponding to the Schur matrix A.

      LDB     INTEGER
              The leading dimension of array B.  LDB >= MAX(1,N).

      C       (input) DOUBLE PRECISION array, dimension (LDC,N)
              The leading P-by-N part of this array must contain the
              state/output matrix C, corresponding to the Schur
              matrix A.

      LDC     INTEGER
              The leading dimension of array C.  LDC >= MAX(1,P).

      D       (input) DOUBLE PRECISION array, dimension (LDD,M)
              The leading P-by-M part of this array must
              contain the full row rank input/output matrix D.

      LDD     INTEGER
              The leading dimension of array D.  LDD >= MAX(1,P).

      SCALEC  (output) DOUBLE PRECISION
              Scaling factor for the controllability Grammian in (1).

      SCALEO  (output) DOUBLE PRECISION
              Scaling factor for the observability Grammian in (2).

      S       (output) DOUBLE PRECISION array, dimension (LDS,N)
              The leading N-by-N upper triangular part of this array
              contains the Cholesky factor Su of the cotrollability
              Grammian P = Su*Su' satisfying (1).

      LDS     INTEGER
              The leading dimension of array S.  LDS >= MAX(1,N).

      R       (output) DOUBLE PRECISION array, dimension (LDR,N)
              The leading N-by-N upper triangular part of this array
              contains the Cholesky factor Ru of the observability
              Grammian Q = Ru'*Ru satisfying (2).

      LDR     INTEGER
              The leading dimension of array R.  LDR >= MAX(1,N).

Workspace

      IWORK   INTEGER array, dimension (2*N)

      DWORK   DOUBLE PRECISION array, dimension (LDWORK)
              On exit, if INFO = 0, DWORK(1) returns the optimal value
              of LDWORK and DWORK(2) contains RCOND, the reciprocal
              condition number of the U11 matrix from the expression
              used to compute X = U21*inv(U11). A small value RCOND
              indicates possible ill-conditioning of the Riccati
              equation (3).

      LDWORK  INTEGER
              The length of the array DWORK.
              LDWORK >= MAX( 2, N*(MAX(N,M,P)+5),
                             2*N*P+MAX(P*(M+2),10*N*(N+1) ) ).
              For optimum performance LDWORK should be larger.

      BWORK   LOGICAL array, dimension 2*N

Error Indicator

      INFO    INTEGER
              = 0:  successful exit;
              < 0:  if INFO = -i, the i-th argument had an illegal
                    value;
              = 1:  the state matrix A is not stable or is not in a
                    real Schur form;
              = 2:  the reduction of Hamiltonian matrix to real Schur
                    form failed;
              = 3:  the reordering of the real Schur form of the
                    Hamiltonian matrix failed;
              = 4:  the Hamiltonian matrix has less than N stable
                    eigenvalues;
              = 5:  the coefficient matrix U11 in the linear system
                    X*U11 = U21, used to determine X, is singular to
                    working precision;
              = 6:  the feedthrough matrix D has not a full row rank P.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index