AB09KX

Stable projection of V G W or conj(V) G conj(W)

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

Purpose

  To construct a state-space representation (A,BS,CS,DS) of the
  stable projection of V*G*W or conj(V)*G*conj(W) from the
  state-space representations (A,B,C,D), (AV,BV,CV,DV), and
  (AW,BW,CW,DW) of the transfer-function matrices G, V and W,
  respectively. G is assumed to be a stable transfer-function
  matrix and the state matrix A must be in a real Schur form.
  When computing the stable projection of V*G*W, V and W are assumed
  to be completely unstable transfer-function matrices.
  When computing the stable projection of conj(V)*G*conj(W),
  V and W are assumed to be stable transfer-function matrices.

  For a transfer-function matrix G, conj(G) denotes the conjugate
  of G given by G'(-s) for a continuous-time system or G'(1/z)
  for a discrete-time system.

Specification
      SUBROUTINE AB09KX( JOB, DICO, WEIGHT, N, NV, NW, M, P,
     $                   A,  LDA,  B,  LDB,  C,  LDC,  D,  LDD,
     $                   AV, LDAV, BV, LDBV, CV, LDCV, DV, LDDV,
     $                   AW, LDAW, BW, LDBW, CW, LDCW, DW, LDDW,
     $                   DWORK, LDWORK, IWARN, INFO )
C     .. Scalar Arguments ..
      CHARACTER        DICO, JOB, WEIGHT
      INTEGER          INFO, IWARN, LDA, LDAV, LDAW, LDB, LDBV, LDBW,
     $                 LDC, LDCV, LDCW, LDD, LDDV, LDDW, LDWORK, M, N,
     $                 NV, NW, P
C     .. Array Arguments ..
      DOUBLE PRECISION A(LDA,*),   B(LDB,*),   C(LDC,*),   D(LDD,*),
     $                 AV(LDAV,*), BV(LDBV,*), CV(LDCV,*), DV(LDDV,*),
     $                 AW(LDAW,*), BW(LDBW,*), CW(LDCW,*), DW(LDDW,*),
     $                 DWORK(*)

Arguments

Mode Parameters

  JOB     CHARACTER*1
          Specifies which projection to be computed as follows:
          = 'N':  compute the stable projection of V*G*W;
          = 'C':  compute the stable projection of
                  conj(V)*G*conj(W).

  DICO    CHARACTER*1
          Specifies the type of the systems as follows:
          = 'C':  G, V and W are continuous-time systems;
          = 'D':  G, V and W are discrete-time systems.

  WEIGHT  CHARACTER*1
          Specifies the type of frequency weighting, as follows:
          = 'N':  no weightings are used (V = I, W = I);
          = 'L':  only left weighting V is used (W = I);
          = 'R':  only right weighting W is used (V = I);
          = 'B':  both left and right weightings V and W are used.

Input/Output Parameters
  N       (input) INTEGER
          The order of the matrix A. Also the number of rows of
          the matrix B and the number of columns of the matrix C.
          N represents the dimension of the state vector of the
          system with the transfer-function matrix G.  N >= 0.

  NV      (input) INTEGER
          The order of the matrix AV. Also the number of rows of
          the matrix BV and the number of columns of the matrix CV.
          NV represents the dimension of the state vector of the
          system with the transfer-function matrix V.  NV >= 0.

  NW      (input) INTEGER
          The order of the matrix AW. Also the number of rows of
          the matrix BW and the number of columns of the matrix CW.
          NW represents the dimension of the state vector of the
          system with the transfer-function matrix W.  NW >= 0.

  M       (input) INTEGER
          The number of columns of the matrices B, D, BW and DW
          and number of rows of the matrices CW and DW.  M >= 0.
          M represents the dimension of input vectors of the
          systems with the transfer-function matrices G and W and
          also the dimension of the output vector of the system
          with the transfer-function matrix W.

  P       (input) INTEGER
          The number of rows of the matrices C, D, CV and DV and the
          number of columns of the matrices BV and DV.  P >= 0.
          P represents the dimension of output vectors of the
          systems with the transfer-function matrices G and V and
          also the dimension of the input vector of the system
          with the transfer-function matrix V.

  A       (input) DOUBLE PRECISION array, dimension (LDA,N)
          The leading N-by-N part of this array must
          contain the state matrix A of the system with the
          transfer-function matrix G in a real Schur form.

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

  B       (input/output) DOUBLE PRECISION array, dimension (LDB,M)
          On entry, the leading N-by-M part of this array must
          contain the input matrix B of the system with the
          transfer-function matrix G.
          On exit, if INFO = 0, the leading N-by-M part of this
          array contains the input matrix BS of the stable
          projection of V*G*W if JOB = 'N', and of conj(V)*G*conj(W)
          if JOB = 'C'.

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

  C       (input/output) DOUBLE PRECISION array, dimension (LDC,N)
          On entry, the leading P-by-N part of this array must
          contain the output matrix C of the system with the
          transfer-function matrix G.
          On exit, if INFO = 0, the leading P-by-N part of this
          array contains the output matrix CS of the stable
          projection of V*G*W if JOB = 'N', and of conj(V)*G*conj(W)
          if JOB = 'C'.

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

  D       (input/output) DOUBLE PRECISION array, dimension (LDD,M)
          On entry, the leading P-by-M part of this array must
          contain the feedthrough matrix D of the system with the
          transfer-function matrix G.
          On exit, if INFO = 0, the leading P-by-M part of this
          array contains the feedthrough matrix DS of the stable
          projection of V*G*W if JOB = 'N', and of conj(V)*G*conj(W)
          if JOB = 'C'.

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

  AV      (input/output) DOUBLE PRECISION array, dimension (LDAV,NV)
          On entry, if WEIGHT = 'L' or 'B', the leading NV-by-NV
          part of this array must contain the state matrix AV of
          the system with the transfer-function matrix V.
          On exit, if WEIGHT = 'L' or 'B', and INFO = 0, the leading
          NV-by-NV part of this array contains a real Schur form
          of AV.
          AV is not referenced if WEIGHT = 'R' or 'N'.

  LDAV    INTEGER
          The leading dimension of the array AV.
          LDAV >= MAX(1,NV), if WEIGHT = 'L' or 'B';
          LDAV >= 1,         if WEIGHT = 'R' or 'N'.

  BV      (input/output) DOUBLE PRECISION array, dimension (LDBV,P)
          On entry, if WEIGHT = 'L' or 'B', the leading NV-by-P part
          of this array must contain the input matrix BV of the
          system with the transfer-function matrix V.
          On exit, if WEIGHT = 'L' or 'B', and INFO = 0, the leading
          NV-by-P part of this array contains the transformed input
          matrix BV.
          BV is not referenced if WEIGHT = 'R' or 'N'.

  LDBV    INTEGER
          The leading dimension of the array BV.
          LDBV >= MAX(1,NV), if WEIGHT = 'L' or 'B';
          LDBV >= 1,         if WEIGHT = 'R' or 'N'.

  CV      (input/output) DOUBLE PRECISION array, dimension (LDCV,NV)
          On entry, if WEIGHT = 'L' or 'B', the leading P-by-NV part
          of this array must contain the output matrix CV of the
          system with the transfer-function matrix V.
          On exit, if WEIGHT = 'L' or 'B', and INFO = 0, the leading
          P-by-NV part of this array contains the transformed output
          matrix CV.
          CV is not referenced if WEIGHT = 'R' or 'N'.

  LDCV    INTEGER
          The leading dimension of the array CV.
          LDCV >= MAX(1,P), if WEIGHT = 'L' or 'B';
          LDCV >= 1,        if WEIGHT = 'R' or 'N'.

  DV      (input) DOUBLE PRECISION array, dimension (LDDV,P)
          If WEIGHT = 'L' or 'B', the leading P-by-P part of this
          array must contain the feedthrough matrix DV of the system
          with the transfer-function matrix V.
          DV is not referenced if WEIGHT = 'R' or 'N'.

  LDDV    INTEGER
          The leading dimension of the array DV.
          LDDV >= MAX(1,P), if WEIGHT = 'L' or 'B';
          LDDV >= 1,        if WEIGHT = 'R' or 'N'.

  AW      (input/output) DOUBLE PRECISION array, dimension (LDAW,NW)
          On entry, if WEIGHT = 'R' or 'B', the leading NW-by-NW
          part of this array must contain the state matrix AW of
          the system with the transfer-function matrix W.
          On exit, if WEIGHT = 'R' or 'B', and INFO = 0, the leading
          NW-by-NW part of this array contains a real Schur form
          of AW.
          AW is not referenced if WEIGHT = 'L' or 'N'.

  LDAW    INTEGER
          The leading dimension of the array AW.
          LDAW >= MAX(1,NW), if WEIGHT = 'R' or 'B';
          LDAW >= 1,         if WEIGHT = 'L' or 'N'.

  BW      (input/output) DOUBLE PRECISION array, dimension (LDBW,M)
          On entry, if WEIGHT = 'R' or 'B', the leading NW-by-M part
          of this array must contain the input matrix BW of the
          system with the transfer-function matrix W.
          On exit, if WEIGHT = 'R' or 'B', and INFO = 0, the leading
          NW-by-M part of this array contains the transformed input
          matrix BW.
          BW is not referenced if WEIGHT = 'L' or 'N'.

  LDBW    INTEGER
          The leading dimension of the array BW.
          LDBW >= MAX(1,NW), if WEIGHT = 'R' or 'B';
          LDBW >= 1,         if WEIGHT = 'L' or 'N'.

  CW      (input/output) DOUBLE PRECISION array, dimension (LDCW,NW)
          On entry, if WEIGHT = 'R' or 'B', the leading M-by-NW part
          of this array must contain the output matrix CW of the
          system with the transfer-function matrix W.
          On exit, if WEIGHT = 'R' or 'B', and INFO = 0, the leading
          M-by-NW part of this array contains the transformed output
          matrix CW.
          CW is not referenced if WEIGHT = 'L' or 'N'.

  LDCW    INTEGER
          The leading dimension of the array CW.
          LDCW >= MAX(1,M), if WEIGHT = 'R' or 'B';
          LDCW >= 1,        if WEIGHT = 'L' or 'N'.

  DW      (input) DOUBLE PRECISION array, dimension (LDDW,M)
          If WEIGHT = 'R' or 'B', the leading M-by-M part of this
          array must contain the feedthrough matrix DW of the system
          with the transfer-function matrix W.
          DW is not referenced if WEIGHT = 'L' or 'N'.

  LDDW    INTEGER
          The leading dimension of the array DW.
          LDDW >= MAX(1,M), if WEIGHT = 'R' or 'B';
          LDDW >= 1,        if WEIGHT = 'L' or 'N'.

Workspace
  DWORK   DOUBLE PRECISION array, dimension (LDWORK)
          On exit, if INFO = 0, DWORK(1) returns the optimal value
          of LDWORK.

  LDWORK  INTEGER
          The length of the array DWORK.
          LDWORK >= MAX( 1, LDW1, LDW2 ), where
            LDW1 = 0 if WEIGHT = 'R' or 'N' and
            LDW1 = MAX( NV*(NV+5), NV*N + MAX( a, P*N, P*M ) )
                   if WEIGHT = 'L' or WEIGHT = 'B',
            LDW2 = 0 if WEIGHT = 'L' or 'N' and
            LDW2 = MAX( NW*(NW+5), NW*N + MAX( b, M*N, P*M ) )
                   if WEIGHT = 'R' or WEIGHT = 'B',
            a = 0,    b = 0,     if DICO = 'C' or  JOB = 'N',
            a = 2*NV, b = 2*NW,  if DICO = 'D' and JOB = 'C'.
          For good performance, LDWORK should be larger.

Warning Indicator
  IWARN   INTEGER
          =  0:  no warning;
          =  1:  JOB = 'N' and AV is not completely unstable, or
                 JOB = 'C' and AV is not stable;
          =  2:  JOB = 'N' and AW is not completely unstable, or
                 JOB = 'C' and AW is not stable;
          =  3:  both above conditions appear.

Error Indicator
  INFO    INTEGER
          =  0:  successful exit;
          <  0:  if INFO = -i, the i-th argument had an illegal
                 value;
          =  1:  the reduction of AV to a real Schur form failed;
          =  2:  the reduction of AW to a real Schur form failed;
          =  3:  the solution of the Sylvester equation failed
                 because the matrices A and AV have common
                 eigenvalues (if JOB = 'N'), or -AV and A have
                 common eigenvalues (if JOB = 'C' and DICO = 'C'),
                 or AV has an eigenvalue which is the reciprocal of
                 one of the eigenvalues of A (if JOB = 'C' and
                 DICO = 'D');
          =  4:  the solution of the Sylvester equation failed
                 because the matrices A and AW have common
                 eigenvalues (if JOB = 'N'), or -AW and A have
                 common eigenvalues (if JOB = 'C' and DICO = 'C'),
                 or AW has an eigenvalue which is the reciprocal of
                 one of the eigenvalues of A (if JOB = 'C' and
                 DICO = 'D').

Method
  The matrices of the stable projection of V*G*W are computed as

    BS = B*DW + Y*BW,  CS = CV*X + DV*C,  DS = DV*D*DW,

  where X and Y satisfy the continuous-time Sylvester equations

    AV*X - X*A  + BV*C = 0,
    -A*Y + Y*AW + B*CW = 0.

  The matrices of the stable projection of conj(V)*G*conj(W) are
  computed using the explicit formulas established in [1].

  For a continuous-time system, the matrices BS, CS and DS of
  the stable projection are computed as

    BS = B*DW' + Y*CW',  CS = BV'*X + DV'*C,  DS = DV'*D*DW',

  where X and Y satisfy the continuous-time Sylvester equations

    AV'*X + X*A   + CV'*C = 0,
      A*Y + Y*AW' + B*BW' = 0.

  For a discrete-time system, the matrices BS, CS and DS of
  the stable projection are computed as

    BS = B*DW' + A*Y*CW',  CS = BV'*X*A + DV'*C,
    DS = DV'*D*DW' + BV'*X*B*DW' + DV'*C*Y*CW' + BV'*X*A*Y*CW',

  where X and Y satisfy the discrete-time Sylvester equations

    AV'*X*A + CV'*C = X,
    A*Y*AW' + B*BW' = Y.

References
  [1] Varga A.
      Explicit formulas for an efficient implementation
      of the frequency-weighting model reduction approach.
      Proc. 1993 European Control Conference, Groningen, NL,
      pp. 693-696, 1993.

Numerical Aspects
  The implemented methods rely on numerically stable algorithms.

Further Comments
  The matrix A must be stable, but its stability is not checked by
  this routine.

Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index