AB13BD

H2 or L2 norm of a system

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

Purpose

  To compute the H2 or L2 norm of the transfer-function matrix G
  of the system (A,B,C,D). G must not have poles on the imaginary
  axis, for a continuous-time system, or on the unit circle, for
  a discrete-time system. If the H2-norm is computed, the system
  must be stable.

Specification
      DOUBLE PRECISION FUNCTION AB13BD( DICO, JOBN, N, M, P, A, LDA,
     $                                  B, LDB, C, LDC, D, LDD, NQ, TOL,
     $                                  DWORK, LDWORK, IWARN, INFO)
C     .. Scalar Arguments ..
      CHARACTER         DICO, JOBN
      INTEGER           INFO, IWARN, LDA, LDB, LDC, LDD, LDWORK, M,
     $                  N, NQ, P
      DOUBLE PRECISION  TOL
C     .. Array Arguments ..
      DOUBLE PRECISION  A(LDA,*), B(LDB,*), C(LDC,*), D(LDD,*), DWORK(*)

Function Value
  AB13BD   DOUBLE PRECISION
           The H2-norm of G, if JOBN = 'H', or the L2-norm of G,
           if JOBN = 'L' (if INFO = 0).

Arguments

Mode Parameters

  DICO    CHARACTER*1
          Specifies the type of the system as follows:
          = 'C':  continuous-time system;
          = 'D':  discrete-time system.

  JOBN    CHARACTER*1
          Specifies the norm to be computed as follows:
          = 'H':  the H2-norm;
          = 'L':  the L2-norm.

Input/Output Parameters
  N       (input) INTEGER
          The order of the matrix A, 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.  N >= 0.

  M       (input) INTEGER
          The number of columns of the matrices B and D.
          M represents the dimension of input vector.  M >= 0.

  P       (input) INTEGER
          The number of rows of the matrices C and D.
          P represents the dimension of output vector.  P >= 0.

  A       (input/output) DOUBLE PRECISION array, dimension (LDA,N)
          On entry, the leading N-by-N part of this array must
          contain the state dynamics matrix of the system.
          On exit, the leading NQ-by-NQ part of this array contains
          the state dynamics matrix (in a real Schur form) of the
          numerator factor Q of the right coprime factorization with
          inner denominator of G (see METHOD).

  LDA     INTEGER
          The leading dimension of 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/state matrix of the system.
          On exit, the leading NQ-by-M part of this array contains
          the input/state matrix of the numerator factor Q of the
          right coprime factorization with inner denominator of G
          (see METHOD).

  LDB     INTEGER
          The leading dimension of 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 state/output matrix of the system.
          On exit, the leading P-by-NQ part of this array contains
          the state/output matrix of the numerator factor Q of the
          right coprime factorization with inner denominator of G
          (see METHOD).

  LDC     INTEGER
          The leading dimension of 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 input/output matrix of the system.
          If DICO = 'C', D must be a null matrix.
          On exit, the leading P-by-M part of this array contains
          the input/output matrix of the numerator factor Q of
          the right coprime factorization with inner denominator
          of G (see METHOD).

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

  NQ      (output) INTEGER
          The order of the resulting numerator Q of the right
          coprime factorization with inner denominator of G (see
          METHOD).
          Generally, NQ = N - NS, where NS is the number of
          uncontrollable unstable eigenvalues.

Tolerances
  TOL     DOUBLE PRECISION
          The absolute tolerance level below which the elements of
          B are considered zero (used for controllability tests).
          If the user sets TOL <= 0, then an implicitly computed,
          default tolerance, defined by  TOLDEF = N*EPS*NORM(B),
          is used instead, where EPS is the machine precision
          (see LAPACK Library routine DLAMCH) and NORM(B) denotes
          the 1-norm of B.

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

  LDWORK  INTEGER
          The dimension of working array DWORK.
          LDWORK >= MAX( 1, M*(N+M) + MAX( N*(N+5), M*(M+2), 4*P ),
                            N*( MAX( N, P ) + 4 ) + MIN( N, P ) ).
          For optimum performance LDWORK should be larger.

Warning Indicator
  IWARN   INTEGER
          = 0:  no warning;
          = K:  K violations of the numerical stability condition
                occured during the assignment of eigenvalues in
                computing the right coprime factorization with inner
                denominator of G (see the SLICOT subroutine SB08DD).

Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value;
          = 1:  the reduction of A to a real Schur form failed;
          = 2:  a failure was detected during the reordering of the
                real Schur form of A, or in the iterative process
                for reordering the eigenvalues of Z'*(A + B*F)*Z
                along the diagonal (see SLICOT routine SB08DD);
          = 3:  if DICO = 'C' and the matrix A has a controllable
                eigenvalue on the imaginary axis, or DICO = 'D'
                and A has a controllable eigenvalue on the unit
                circle;
          = 4:  the solution of Lyapunov equation failed because
                the equation is singular;
          = 5:  if DICO = 'C' and D is a nonzero matrix;
          = 6:  if JOBN = 'H' and the system is unstable.

Method
  The subroutine is based on the algorithms proposed in [1] and [2].

  If the given transfer-function matrix G is unstable, then a right
  coprime factorization with inner denominator of G is first
  computed
            -1
     G = Q*R  ,

  where Q and R are stable transfer-function matrices and R is
  inner. If G is stable, then Q = G and R = I.
  Let (AQ,BQ,CQ,DQ) be the state-space representation of Q.

  If DICO = 'C', then the L2-norm of G is computed as

     NORM2(G) = NORM2(Q) = SQRT(TRACE(BQ'*X*BQ)),

  where X satisfies the continuous-time Lyapunov equation

     AQ'*X + X*AQ + CQ'*CQ = 0.

  If DICO = 'D', then the l2-norm of G is computed as

     NORM2(G) = NORM2(Q) = SQRT(TRACE(BQ'*X*BQ+DQ'*DQ)),

  where X satisfies the discrete-time Lyapunov equation

     AQ'*X*AQ - X + CQ'*CQ = 0.

References
  [1] Varga A.
      On computing 2-norms of transfer-function matrices.
      Proc. 1992 ACC, Chicago, June 1992.

  [2] Varga A.
      A Schur method for computing coprime factorizations with
      inner denominators and applications in model reduction.
      Proc. ACC'93, San Francisco, CA, pp. 2130-2131, 1993.

Numerical Aspects
                                         3
  The algorithm requires no more than 14N  floating point
  operations.

Further Comments
  None
Example

Program Text

*     AB13BD EXAMPLE PROGRAM TEXT
*     Copyright (c) 2002-2017 NICONET e.V.
*
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        ( NIN = 5, NOUT = 6 )
      INTEGER          NMAX, MMAX, PMAX
      PARAMETER        ( NMAX = 20, MMAX = 20, PMAX = 20 )
      INTEGER          LDA, LDB, LDC, LDD
      PARAMETER        ( LDA = NMAX, LDB = NMAX, LDC = PMAX,
     $                   LDD = PMAX )
      INTEGER          LDWORK
      PARAMETER        ( LDWORK = MAX( MMAX*( NMAX + MMAX ) +
     $                                 MAX( NMAX*( NMAX + 5 ),
     $                                      MMAX*( MMAX + 2 ), 4*PMAX ),
     $                                 NMAX*( MAX( NMAX, PMAX ) + 4 ) +
     $                                 MIN( NMAX, PMAX ) ) )
*     .. Local Scalars ..
      DOUBLE PRECISION S2NORM, TOL
      INTEGER          I, INFO, IWARN, J, M, N, NQ, P
      CHARACTER*1      DICO, JOBN
*     .. Local Arrays ..
      DOUBLE PRECISION A(LDA,NMAX), B(LDB,MMAX), C(LDC,NMAX),
     $                 D(LDD,MMAX), DWORK(LDWORK)
*     .. External Functions ..
      LOGICAL          LSAME
      DOUBLE PRECISION AB13BD
      EXTERNAL         AB13BD, LSAME
*     .. Intrinsic Functions ..
      INTRINSIC        MAX, MIN
*     .. Executable Statements ..
*
      WRITE ( NOUT, FMT = 99999 )
*     Skip the heading in the data file and read the data.
      READ ( NIN, FMT = '()' )
      READ ( NIN, FMT = * ) N, M, P, TOL, DICO, JOBN
      IF ( N.LT.0 .OR. N.GT.NMAX ) THEN
         WRITE ( NOUT, FMT = 99990 ) N
      ELSE
         READ ( NIN, FMT = * ) ( ( A(I,J), J = 1, N ), I = 1,N )
         IF ( M.LT.0 .OR. M.GT.MMAX ) THEN
            WRITE ( NOUT, FMT = 99989 ) M
         ELSE
            READ ( NIN, FMT = * ) ( ( B(I,J), J = 1, M ), I = 1, N )
            IF ( P.LT.0 .OR. P.GT.PMAX ) THEN
               WRITE ( NOUT, FMT = 99988 ) P
            ELSE
               READ ( NIN, FMT = * ) ( ( C(I,J), J = 1, N ), I = 1, P )
               READ ( NIN, FMT = * ) ( ( D(I,J), J = 1, M ), I = 1, P )
*              Compute the H2 or L2 norm of (A,B,C,D).
               S2NORM = AB13BD( DICO, JOBN, N, M, P, A, LDA, B, LDB,
     *                          C, LDC, D, LDD, NQ, TOL, DWORK, LDWORK,
     *                          IWARN, INFO)
*
               IF ( INFO.NE.0 ) THEN
                  WRITE ( NOUT, FMT = 99998 ) INFO
               ELSE
                  IF( LSAME( JOBN, 'H' ) ) THEN
                     WRITE ( NOUT, FMT = 99997 ) S2NORM
                  ELSE
                     WRITE ( NOUT, FMT = 99996 ) S2NORM
                  END IF
               END IF
            END IF
         END IF
      END IF
      STOP
*
99999 FORMAT (' AB13BD EXAMPLE PROGRAM RESULTS',/1X)
99998 FORMAT (' INFO on exit from AB13BD = ',I2)
99997 FORMAT (' The H2-norm of the system = ',1PD14.5)
99996 FORMAT (' The L2-norm of the system = ',1PD14.5)
99990 FORMAT (/' N is out of range.',/' N = ',I5)
99989 FORMAT (/' M is out of range.',/' M = ',I5)
99988 FORMAT (/' P is out of range.',/' P = ',I5)
      END
Program Data
 AB13BD EXAMPLE PROGRAM DATA (Continuous system)
  7  2  3   1.E-10 C L
 -0.04165  0.0000  4.9200   0.4920  0.0000   0.0000  0.0000
 -5.2100  -12.500  0.0000   0.0000  0.0000   0.0000  0.0000
  0.0000   3.3300 -3.3300   0.0000  0.0000   0.0000  0.0000
  0.5450   0.0000  0.0000   0.0000  0.0545   0.0000  0.0000
  0.0000   0.0000  0.0000  -0.49200 0.004165 0.0000  4.9200
  0.0000   0.0000  0.0000   0.0000  0.5210  -12.500  0.0000
  0.0000   0.0000  0.0000   0.0000  0.0000   3.3300 -3.3300
  0.0000   0.0000
  12.500   0.0000
  0.0000   0.0000
  0.0000   0.0000
  0.0000   0.0000
  0.0000   12.500
  0.0000   0.0000
  1.0000   0.0000  0.0000   0.0000  0.0000  0.0000  0.0000
  0.0000   0.0000  0.0000   1.0000  0.0000  0.0000  0.0000
  0.0000   0.0000  0.0000   0.0000  1.0000  0.0000  0.0000
  0.0000   0.0000  
  0.0000   0.0000  
  0.0000   0.0000  
Program Results
 AB13BD EXAMPLE PROGRAM RESULTS

 The L2-norm of the system =    7.93948D+00

Return to index