**Purpose**

To compute the matrices of an H-infinity (sub)optimal controller | AK | BK | K = |----|----|, | CK | DK | from the state feedback matrix F and output injection matrix H as determined by the SLICOT Library routine SB10QD.

SUBROUTINE SB10RD( N, M, NP, NCON, NMEAS, GAMMA, A, LDA, B, LDB, $ C, LDC, D, LDD, F, LDF, H, LDH, TU, LDTU, TY, $ LDTY, X, LDX, Y, LDY, AK, LDAK, BK, LDBK, CK, $ LDCK, DK, LDDK, IWORK, DWORK, LDWORK, INFO ) C .. Scalar Arguments .. INTEGER INFO, LDA, LDAK, LDB, LDBK, LDC, LDCK, LDD, $ LDDK, LDF, LDH, LDTU, LDTY, LDWORK, LDX, LDY, $ M, N, NCON, NMEAS, NP DOUBLE PRECISION GAMMA C .. Array Arguments .. INTEGER IWORK( * ) DOUBLE PRECISION A( LDA, * ), AK( LDAK, * ), B( LDB, * ), $ BK( LDBK, * ), C( LDC, * ), CK( LDCK, * ), $ D( LDD, * ), DK( LDDK, * ), DWORK( * ), $ F( LDF, * ), H( LDH, * ), TU( LDTU, * ), $ TY( LDTY, * ), X( LDX, * ), Y( LDY, * )

**Input/Output Parameters**

N (input) INTEGER The order of the system. N >= 0. M (input) INTEGER The column size of the matrix B. M >= 0. NP (input) INTEGER The row size of the matrix C. NP >= 0. NCON (input) INTEGER The number of control inputs (M2). M >= NCON >= 0. NP-NMEAS >= NCON. NMEAS (input) INTEGER The number of measurements (NP2). NP >= NMEAS >= 0. M-NCON >= NMEAS. GAMMA (input) DOUBLE PRECISION The value of gamma. It is assumed that gamma is sufficiently large so that the controller is admissible. GAMMA >= 0. A (input) DOUBLE PRECISION array, dimension (LDA,N) The leading N-by-N part of this array must contain the system state matrix A. LDA INTEGER The leading dimension of the array A. LDA >= max(1,N). B (input) DOUBLE PRECISION array, dimension (LDB,M) The leading N-by-M part of this array must contain the system input matrix B. LDB INTEGER The leading dimension of the array B. LDB >= max(1,N). C (input) DOUBLE PRECISION array, dimension (LDC,N) The leading NP-by-N part of this array must contain the system output matrix C. LDC INTEGER The leading dimension of the array C. LDC >= max(1,NP). D (input) DOUBLE PRECISION array, dimension (LDD,M) The leading NP-by-M part of this array must contain the system input/output matrix D. LDD INTEGER The leading dimension of the array D. LDD >= max(1,NP). F (input) DOUBLE PRECISION array, dimension (LDF,N) The leading M-by-N part of this array must contain the state feedback matrix F. LDF INTEGER The leading dimension of the array F. LDF >= max(1,M). H (input) DOUBLE PRECISION array, dimension (LDH,NP) The leading N-by-NP part of this array must contain the output injection matrix H. LDH INTEGER The leading dimension of the array H. LDH >= max(1,N). TU (input) DOUBLE PRECISION array, dimension (LDTU,M2) The leading M2-by-M2 part of this array must contain the control transformation matrix TU, as obtained by the SLICOT Library routine SB10PD. LDTU INTEGER The leading dimension of the array TU. LDTU >= max(1,M2). TY (input) DOUBLE PRECISION array, dimension (LDTY,NP2) The leading NP2-by-NP2 part of this array must contain the measurement transformation matrix TY, as obtained by the SLICOT Library routine SB10PD. LDTY INTEGER The leading dimension of the array TY. LDTY >= max(1,NP2). X (input) DOUBLE PRECISION array, dimension (LDX,N) The leading N-by-N part of this array must contain the matrix X, solution of the X-Riccati equation, as obtained by the SLICOT Library routine SB10QD. LDX INTEGER The leading dimension of the array X. LDX >= max(1,N). Y (input) DOUBLE PRECISION array, dimension (LDY,N) The leading N-by-N part of this array must contain the matrix Y, solution of the Y-Riccati equation, as obtained by the SLICOT Library routine SB10QD. LDY INTEGER The leading dimension of the array Y. LDY >= max(1,N). AK (output) DOUBLE PRECISION array, dimension (LDAK,N) The leading N-by-N part of this array contains the controller state matrix AK. LDAK INTEGER The leading dimension of the array AK. LDAK >= max(1,N). BK (output) DOUBLE PRECISION array, dimension (LDBK,NMEAS) The leading N-by-NMEAS part of this array contains the controller input matrix BK. LDBK INTEGER The leading dimension of the array BK. LDBK >= max(1,N). CK (output) DOUBLE PRECISION array, dimension (LDCK,N) The leading NCON-by-N part of this array contains the controller output matrix CK. LDCK INTEGER The leading dimension of the array CK. LDCK >= max(1,NCON). DK (output) DOUBLE PRECISION array, dimension (LDDK,NMEAS) The leading NCON-by-NMEAS part of this array contains the controller input/output matrix DK. LDDK INTEGER The leading dimension of the array DK. LDDK >= max(1,NCON).

IWORK INTEGER array, dimension (LIWORK), where LIWORK = max(2*(max(NP,M)-M2-NP2,M2,N),NP2) DWORK DOUBLE PRECISION array, dimension (LDWORK) On exit, if INFO = 0, DWORK(1) contains the optimal LDWORK. LDWORK INTEGER The dimension of the array DWORK. LDWORK >= max(1, M2*NP2 + NP2*NP2 + M2*M2 + max(D1*D1 + max(2*D1, (D1+D2)*NP2), D2*D2 + max(2*D2, D2*M2), 3*N, N*(2*NP2 + M2) + max(2*N*M2, M2*NP2 + max(M2*M2+3*M2, NP2*(2*NP2+ M2+max(NP2,N)))))) where D1 = NP1 - M2, D2 = M1 - NP2, NP1 = NP - NP2, M1 = M - M2. For good performance, LDWORK must generally be larger. Denoting Q = max(M1,M2,NP1,NP2), an upper bound is max( 1, Q*(3*Q + 3*N + max(2*N, 4*Q + max(Q, N)))).

INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value; = 1: if the controller is not admissible (too small value of gamma); = 2: if the determinant of Im2 + Tu*D11HAT*Ty*D22 is zero.

The routine implements the Glover's and Doyle's formulas [1],[2].

[1] Glover, K. and Doyle, J.C. State-space formulae for all stabilizing controllers that satisfy an Hinf norm bound and relations to risk sensitivity. Systems and Control Letters, vol. 11, pp. 167-172, 1988. [2] Balas, G.J., Doyle, J.C., Glover, K., Packard, A., and Smith, R. mu-Analysis and Synthesis Toolbox. The MathWorks Inc., Natick, Mass., 1995.

The accuracy of the result depends on the condition numbers of the input and output transformations.

None

**Program Text**

None

None

None