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
NoneExample
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) ENDProgram 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