TB04BX

Gain of a SISO linear system, given its state-space representation, poles and zeros

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

Purpose

  To compute the gain of a single-input single-output linear system,
  given its state-space representation (A,b,c,d), and its poles and
  zeros. The matrix A is assumed to be in an upper Hessenberg form.
  The gain is computed using the formula

                       -1         IP              IZ
     g = (c*( S0*I - A ) *b + d)*Prod( S0 - Pi )/Prod( S0 - Zi ) ,
                                  i=1             i=1            (1)

  where Pi, i = 1 : IP, and Zj, j = 1 : IZ, are the poles and zeros,
  respectively, and S0 is a real scalar different from all poles and
  zeros.

Specification
      SUBROUTINE TB04BX( IP, IZ, A, LDA, B, C, D, PR, PI, ZR, ZI, GAIN,
     $                   IWORK )
C     .. Scalar Arguments ..
      DOUBLE PRECISION   D, GAIN
      INTEGER            IP, IZ, LDA
C     .. Array Arguments ..
      DOUBLE PRECISION   A(LDA,*), B(*), C(*), PI(*), PR(*), ZI(*),
     $                   ZR(*)
      INTEGER            IWORK(*)

Arguments

Input/Output Parameters

  IP      (input) INTEGER
          The number of the system poles.  IP >= 0.

  IZ      (input) INTEGER
          The number of the system zeros.  IZ >= 0.

  A       (input/output) DOUBLE PRECISION array, dimension (LDA,IP)
          On entry, the leading IP-by-IP part of this array must
          contain the state dynamics matrix A in an upper Hessenberg
          form. The elements below the second diagonal are not
          referenced.
          On exit, the leading IP-by-IP upper Hessenberg part of
          this array contains the LU factorization of the matrix
          A - S0*I, as computed by SLICOT Library routine MB02SD.

  LDA     INTEGER
          The leading dimension of array A.  LDA >= max(1,IP).

  B       (input/output) DOUBLE PRECISION array, dimension (IP)
          On entry, this array must contain the system input
          vector b.
          On exit, this array contains the solution of the linear
          system ( A - S0*I )x = b .

  C       (input) DOUBLE PRECISION array, dimension (IP)
          This array must contain the system output vector c.

  D       (input) DOUBLE PRECISION
          The variable must contain the system feedthrough scalar d.

  PR      (input) DOUBLE PRECISION array, dimension (IP)
          This array must contain the real parts of the system
          poles. Pairs of complex conjugate poles must be stored in
          consecutive memory locations.

  PI      (input) DOUBLE PRECISION array, dimension (IP)
          This array must contain the imaginary parts of the system
          poles.

  ZR      (input) DOUBLE PRECISION array, dimension (IZ)
          This array must contain the real parts of the system
          zeros. Pairs of complex conjugate zeros must be stored in
          consecutive memory locations.

  ZI      (input) DOUBLE PRECISION array, dimension (IZ)
          This array must contain the imaginary parts of the system
          zeros.

  GAIN    (output) DOUBLE PRECISION
          The gain of the linear system (A,b,c,d), given by (1).

Workspace
  IWORK   INTEGER array, dimension (IP)
          On exit, it contains the pivot indices; for 1 <= i <= IP,
          row i of the matrix A - S0*I was interchanged with
          row IWORK(i).

Method
  The routine implements the method presented in [1]. A suitable
  value of S0 is chosen based on the system poles and zeros.
  Then, the LU factorization of the upper Hessenberg, nonsingular
  matrix A - S0*I is computed and used to solve the linear system
  in (1).

References
  [1] Varga, A. and Sima, V.
      Numerically Stable Algorithm for Transfer Function Matrix
      Evaluation.
      Int. J. Control, vol. 33, nr. 6, pp. 1123-1133, 1981.

Numerical Aspects
  The algorithm is numerically stable in practice and requires
  O(IP*IP) floating point operations.

Further Comments
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index