<HTML>
<HEAD><TITLE>AB13MD - SLICOT Library Routine Documentation</TITLE>
</HEAD>
<BODY>
<H2><A Name="AB13MD">AB13MD</A></H2>
<H3>
Upper bound on the structured singular value for a square complex matrix
</H3>
<A HREF ="#Specification"><B>[Specification]</B></A>
<A HREF ="#Arguments"><B>[Arguments]</B></A>
<A HREF ="#Method"><B>[Method]</B></A>
<A HREF ="#References"><B>[References]</B></A>
<A HREF ="#Comments"><B>[Comments]</B></A>
<A HREF ="#Example"><B>[Example]</B></A>
<P>
<B><FONT SIZE="+1">Purpose</FONT></B>
<PRE>
To compute an upper bound on the structured singular value for a
given square complex matrix and a given block structure of the
uncertainty.
</PRE>
<A name="Specification"><B><FONT SIZE="+1">Specification</FONT></B></A>
<PRE>
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( * )
</PRE>
<A name="Arguments"><B><FONT SIZE="+1">Arguments</FONT></B></A>
<P>
<B>Mode Parameters</B>
<PRE>
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.
</PRE>
<B>Input/Output Parameters</B>
<PRE>
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.
</PRE>
<B>Workspace</B>
<PRE>
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.
</PRE>
<B>Error Indicator</B>
<PRE>
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.
</PRE>
<A name="Method"><B><FONT SIZE="+1">Method</FONT></B></A>
<PRE>
The routine computes the upper bound proposed in [1].
</PRE>
<A name="References"><B><FONT SIZE="+1">References</FONT></B></A>
<PRE>
[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.
</PRE>
<A name="Numerical Aspects"><B><FONT SIZE="+1">Numerical Aspects</FONT></B></A>
<PRE>
The accuracy and speed of computation depend on the value of
the internal threshold TOL.
</PRE>
<A name="Comments"><B><FONT SIZE="+1">Further Comments</FONT></B></A>
<PRE>
None
</PRE>
<A name="Example"><B><FONT SIZE="+1">Example</FONT></B></A>
<P>
<B>Program Text</B>
<PRE>
* 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
</PRE>
<B>Program Data</B>
<PRE>
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)
</PRE>
<B>Program Results</B>
<PRE>
AB13MD EXAMPLE PROGRAM RESULTS
The value of the structured singular value is
0.4174753408D+02
</PRE>
<HR>
<p>
<A HREF=..\libindex.html><B>Return to index</B></A></BODY>
</HTML>