## AB13MD

### Upper bound on the structured singular value for a square complex matrix

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

Purpose

      To compute an upper bound on the structured singular value for a
      given square complex matrix and a given block structure of the
      uncertainty.

Specification

          SUBROUTINE AB13MD( FACT, N, Z, LDZ, M, NBLOCK, ITYPE, X, BOUND, D,
         $                   G, IWORK, DWORK, LDWORK, ZWORK, LZWORK, INFO )
    C     .. Scalar Arguments ..
          CHARACTER          FACT
          INTEGER            INFO, LDWORK, LDZ, LZWORK, M, N
          DOUBLE PRECISION   BOUND
    C     .. Array Arguments ..
          INTEGER            ITYPE( * ), IWORK( * ), NBLOCK( * )
          COMPLEX*16         Z( LDZ, * ), ZWORK( * )
          DOUBLE PRECISION   D( * ), DWORK( * ), G( * ), X( * )

Arguments

Mode Parameters

      FACT    CHARACTER*1
              Specifies whether or not an information from the
              previous call is supplied in the vector X.
              = 'F':  On entry, X contains information from the
                      previous call.
              = 'N':  On entry, X does not contain an information from
                      the previous call.

Input/Output Parameters

      N       (input) INTEGER
              The order of the matrix Z.  N >= 0.

      Z       (input) COMPLEX*16 array, dimension (LDZ,N)
              The leading N-by-N part of this array must contain the
              complex matrix Z for which the upper bound on the
              structured singular value is to be computed.

      LDZ     INTEGER
              The leading dimension of the array Z.  LDZ >= max(1,N).

      M       (input) INTEGER
              The number of diagonal blocks in the block structure of
              the uncertainty.  M >= 1.

      NBLOCK  (input) INTEGER array, dimension (M)
              The vector of length M containing the block structure
              of the uncertainty. NBLOCK(I), I = 1:M, is the size of
              each block.

      ITYPE   (input) INTEGER array, dimension (M)
              The vector of length M indicating the type of each block.
              For I = 1:M,
              ITYPE(I) = 1 indicates that the corresponding block is a
                           real block, and
              ITYPE(I) = 2 indicates that the corresponding block is a
                           complex block.
              NBLOCK(I) must be equal to 1 if ITYPE(I) is equal to 1.

      X       (input/output) DOUBLE PRECISION array, dimension
              ( M + MR - 1 ), where MR is the number of the real blocks.
              On entry, if FACT = 'F' and NBLOCK(1) < N, this array
              must contain information from the previous call to AB13MD.
              If NBLOCK(1) = N, this array is not used.
              On exit, if NBLOCK(1) < N, this array contains information
              that can be used in the next call to AB13MD for a matrix
              close to Z.

      BOUND   (output) DOUBLE PRECISION
              The upper bound on the structured singular value.

      D, G    (output) DOUBLE PRECISION arrays, dimension (N)
              The vectors of length N containing the diagonal entries
              of the diagonal N-by-N matrices D and G, respectively,
              such that the matrix
              Z'*D^2*Z + sqrt(-1)*(G*Z-Z'*G) - BOUND^2*D^2
              is negative semidefinite.

Workspace

      IWORK   INTEGER array, dimension (MAX(4*M-2,N))

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

      LDWORK  INTEGER
              The dimension of the array DWORK.
              LDWORK >= 2*N*N*M - N*N + 9*M*M + N*M + 11*N + 33*M - 11.
              For best performance
              LDWORK >= 2*N*N*M - N*N + 9*M*M + N*M + 6*N + 33*M - 11 +
                        MAX( 5*N,2*N*NB )
              where NB is the optimal blocksize returned by ILAENV.

      ZWORK   COMPLEX*16 array, dimension (LZWORK)
              On exit, if INFO = 0, ZWORK(1) contains the optimal value
              of LZWORK.

      LZWORK  INTEGER
              The dimension of the array ZWORK.
              LZWORK >= 6*N*N*M + 12*N*N + 6*M + 6*N - 3.
              For best performance
              LZWORK >= 6*N*N*M + 12*N*N + 6*M + 3*N - 3 +
                        MAX( 3*N,N*NB )
              where NB is the optimal blocksize returned by ILAENV.

Error Indicator

      INFO    INTEGER
              = 0:  successful exit;
              < 0:  if INFO = -i, the i-th argument had an illegal
                    value;
              = 1:  the block sizes must be positive integers;
              = 2:  the sum of block sizes must be equal to N;
              = 3:  the size of a real block must be equal to 1;
              = 4:  the block type must be either 1 or 2;
              = 5:  errors in solving linear equations or in matrix
                    inversion;
              = 6:  errors in computing eigenvalues or singular values.

Method

      The routine computes the upper bound proposed in [1].

References

      [1] Fan, M.K.H., Tits, A.L., and Doyle, J.C.
          Robustness in the presence of mixed parametric uncertainty
          and unmodeled dynamics.
          IEEE Trans. Automatic Control, vol. AC-36, 1991, pp. 25-38.

Numerical Aspects

      The accuracy and speed of computation depend on the value of
      the internal threshold TOL.

Further Comments

      None

Example

Program Text

    *     AB13MD EXAMPLE PROGRAM TEXT
    *
    *     .. Parameters ..
          INTEGER          NIN, NOUT
          PARAMETER        ( NIN = 5, NOUT = 6 )
          INTEGER          NMAX, MMAX
          PARAMETER        ( NMAX = 10, MMAX = 10 )
          INTEGER          LDZ
          PARAMETER        ( LDZ = NMAX )
          INTEGER          LIWORK
          PARAMETER        ( LIWORK = MAX( 4*MMAX-2, NMAX ) )
          INTEGER          LDWORK
          PARAMETER        ( LDWORK = 2*NMAX*NMAX*MMAX - NMAX*NMAX +
         $                            9*MMAX*MMAX + NMAX*MMAX + 11*NMAX +
         $                            33*MMAX - 11 )
          INTEGER          LZWORK
          PARAMETER        ( LZWORK = 6*NMAX*NMAX*MMAX + 12*NMAX*NMAX +
         $                            6*MMAX + 6*NMAX - 3 )
    *     .. Local Scalars ..
          INTEGER          I, INFO, J, M, N
          DOUBLE PRECISION BOUND
    *     .. Local Arrays ..
          INTEGER          ITYPE(MMAX), IWORK(LIWORK), NBLOCK(MMAX)
          DOUBLE PRECISION D(NMAX), DWORK(LDWORK), G(NMAX), X(2*MMAX-1)
          COMPLEX*16       Z(LDZ,NMAX), ZWORK(LZWORK)
    *     .. External Subroutines ..
          EXTERNAL         AB13MD
    *     .. Intrinsic Functions ..
          INTRINSIC        MAX
    *     .. 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
          IF ( N.LT.0 .OR. N.GT.NMAX ) THEN
             WRITE ( NOUT, FMT = 99990 ) N
          ELSE IF ( M.LT.0 .OR. M.GT.MMAX ) THEN
             WRITE ( NOUT, FMT = 99989 ) M
          ELSE
             READ ( NIN, FMT = * ) ( NBLOCK(I), I = 1, M )
             READ ( NIN, FMT = * ) ( ITYPE(I), I = 1, M )
             READ ( NIN, FMT = * ) ( ( Z(I,J), J = 1,N ), I = 1,N )
    *        Computing mu.
             CALL AB13MD( 'N', N, Z, LDZ, M, NBLOCK, ITYPE, X, BOUND, D, G,
         $               IWORK, DWORK, LDWORK, ZWORK, LZWORK, INFO )
    *
             IF ( INFO.EQ.0 ) THEN
                WRITE ( NOUT, FMT = 99997 )
                WRITE ( NOUT, FMT = 99991 ) BOUND
             ELSE
                WRITE( NOUT, FMT = 99998 ) INFO
             END IF
          END IF
          STOP
    *
    99999 FORMAT (' AB13MD EXAMPLE PROGRAM RESULTS',/1X)
    99998 FORMAT (' INFO on exit from AB13MD =',I2)
    99997 FORMAT (' The value of the structured singular value is'/)
    99991 FORMAT (D17.10)
    99990 FORMAT (/' N is out of range.',/' N = ',I5)
    99989 FORMAT (/' M is out of range.',/' M = ',I5)
          END

Program Data

     AB13MD EXAMPLE PROGRAM DATA
       6     5
       1     1     2     1     1
       1     1     2     2     2
       (-1.0D0,6.0D0)  (2.0D0,-3.0D0)  (3.0D0,8.0D0)
       (3.0D0,8.0D0)   (-5.0D0,-9.0D0) (-6.0D0,2.0D0)
       (4.0D0,2.0D0)   (-2.0D0,5.0D0)  (-6.0D0,-7.0D0)
       (-4.0D0,11.0D0) (8.0D0,-7.0D0)  (12.0D0,-1.0D0)
       (5.0D0,-4.0D0)  (-4.0D0,-8.0D0) (1.0D0,-3.0D0)
       (-6.0D0,14.0D0) (2.0D0,-5.0D0)  (4.0D0,16.0D0)
       (-1.0D0,6.0D0)  (2.0D0,-3.0D0)  (3.0D0,8.0D0)
       (3.0D0,8.0D0)   (-5.0D0,-9.0D0) (-6.0D0,2.0D0)
       (4.0D0,2.0D0)   (-2.0D0,5.0D0)  (-6.0D0,-7.0D0)
       (-4.0D0,11.0D0) (8.0D0,-7.0D0)  (12.0D0,-1.0D0)
       (5.0D0,-4.0D0)  (-4.0D0,-8.0D0) (1.0D0,-3.0D0)
       (-6.0D0,14.0D0) (2.0D0,-5.0D0)  (4.0D0,16.0D0)

Program Results

     AB13MD EXAMPLE PROGRAM RESULTS

     The value of the structured singular value is

     0.4174753408D+02

Return to index