SB10TD

H2 optimal controller matrices for a discrete-time system

[Specification] [Arguments] [Method] [References] [Comments] [Example]

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.

Specification
      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, * )

Arguments

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.

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

Workspace
  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).

Error Indicator
  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.

Method
  The routine implements the formulas given in [1].

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

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

Further Comments
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index