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
*     Copyright (c) 2002-2017 NICONET e.V.
*
*     .. 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