**Purpose**

To compute the matrices of the H2 optimal discrete-time controller | AK | BK | K = |----|----|, | CK | DK | from the matrices of the controller for the normalized system, as determined by the SLICOT Library routine SB10SD.

SUBROUTINE SB10TD( N, M, NP, NCON, NMEAS, D, LDD, TU, LDTU, TY, $ LDTY, AK, LDAK, BK, LDBK, CK, LDCK, DK, LDDK, $ RCOND, TOL, IWORK, DWORK, LDWORK, INFO ) C .. Scalar Arguments .. INTEGER INFO, LDAK, LDBK, LDCK, LDD, LDDK, LDTU, LDTY, $ LDWORK, M, N, NCON, NMEAS, NP DOUBLE PRECISION RCOND, TOL C .. Array Arguments .. INTEGER IWORK( * ) DOUBLE PRECISION AK( LDAK, * ), BK( LDBK, * ), CK( LDCK, * ), $ D( LDD, * ), DK( LDDK, * ), DWORK( * ), $ TU( LDTU, * ), TY( LDTY, * )

**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. 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. Only the trailing NMEAS-by-NCON submatrix D22 is used. LDD INTEGER The leading dimension of the array D. LDD >= max(1,NP). 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). AK (input/output) DOUBLE PRECISION array, dimension (LDAK,N) On entry, the leading N-by-N part of this array must contain controller state matrix for the normalized system as obtained by the SLICOT Library routine SB10SD. On exit, the leading N-by-N part of this array contains controller state matrix AK. LDAK INTEGER The leading dimension of the array AK. LDAK >= max(1,N). BK (input/output) DOUBLE PRECISION array, dimension (LDBK,NMEAS) On entry, the leading N-by-NMEAS part of this array must contain controller input matrix for the normalized system as obtained by the SLICOT Library routine SB10SD. On exit, the leading N-by-NMEAS part of this array contains controller input matrix BK. LDBK INTEGER The leading dimension of the array BK. LDBK >= max(1,N). CK (input/output) DOUBLE PRECISION array, dimension (LDCK,N) On entry, the leading NCON-by-N part of this array must contain controller output matrix for the normalized system as obtained by the SLICOT Library routine SB10SD. On exit, the leading NCON-by-N part of this array contains controller output matrix CK. LDCK INTEGER The leading dimension of the array CK. LDCK >= max(1,NCON). DK (input/output) DOUBLE PRECISION array, dimension (LDDK,NMEAS) On entry, the leading NCON-by-NMEAS part of this array must contain controller matrix DK for the normalized system as obtained by the SLICOT Library routine SB10SD. On exit, the leading NCON-by-NMEAS part of this array contains controller input/output matrix DK. LDDK INTEGER The leading dimension of the array DK. LDDK >= max(1,NCON). RCOND (output) DOUBLE PRECISION RCOND contains an estimate of the reciprocal condition number of the matrix Im2 + DKHAT*D22 which must be inverted in the computation of the controller.

TOL DOUBLE PRECISION Tolerance used in determining the nonsingularity of the matrix which must be inverted. If TOL <= 0, then a default value equal to sqrt(EPS) is used, where EPS is the relative machine precision.

IWORK INTEGER array, dimension (2*M2) DWORK DOUBLE PRECISION array, dimension (LDWORK) LDWORK INTEGER The dimension of the array DWORK. LDWORK >= max(N*M2,N*NP2,M2*NP2,M2*M2+4*M2).

INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value; = 1: if the matrix Im2 + DKHAT*D22 is singular, or the estimated condition number is larger than or equal to 1/TOL.

The routine implements the formulas given in [1].

[1] Zhou, K., Doyle, J.C., and Glover, K. Robust and Optimal Control. Prentice-Hall, Upper Saddle River, NJ, 1996. [2] Petkov, P.Hr., Gu, D.W., and Konstantinov, M.M. Fortran 77 routines for Hinf and H2 design of linear discrete-time control systems. Report 99-8, Department of Engineering, Leicester University, April 1999.

The accuracy of the result depends on the condition numbers of the input and output transformations and of the matrix Im2 + DKHAT*D22.

None

**Program Text**

None

None

None