## 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 .

```
References
```   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.

```
```  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
```