NF01AD

Computing the output of a Wiener system

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

Purpose

  To calculate the output y of the Wiener system

     x(t+1) = A*x(t) + B*u(t)
     z(t)   = C*x(t) + D*u(t),

     y(t)   = f(z(t),wb(1:L)),

  where t = 1, 2, ..., NSMP, and f is a nonlinear function,
  evaluated by the SLICOT Library routine NF01AY. The parameter
  vector X is partitioned as X = ( wb(1), ..., wb(L), theta ),
  where wb(i), i = 1:L, correspond to the nonlinear part, theta
  corresponds to the linear part, and the notation is fully
  described below.

Specification
      SUBROUTINE NF01AD( NSMP, M, L, IPAR, LIPAR, X, LX, U, LDU, Y, LDY,
     $                   DWORK, LDWORK, INFO )
C     .. Scalar Arguments ..
      INTEGER           INFO, L, LDU, LDWORK, LDY, LX, LIPAR, M, NSMP
C     .. Array Arguments ..
      INTEGER           IPAR(*)
      DOUBLE PRECISION  DWORK(*), U(LDU,*), X(*), Y(LDY,*)

Arguments

Input/Output Parameters

  NSMP    (input) INTEGER
          The number of training samples.  NSMP >= 0.

  M       (input) INTEGER
          The length of each input sample.  M >= 0.

  L       (input) INTEGER
          The length of each output sample.  L >= 0.

  IPAR    (input) INTEGER array, dimension (LIPAR)
          The integer parameters needed.
          IPAR(1)  must contain the order of the linear part,
                   referred to as N below.  N >= 0.
          IPAR(2)  must contain the number of neurons for the
                   nonlinear part, referred to as NN below.
                   NN >= 0.

  LIPAR   (input) INTEGER
          The length of IPAR.  LIPAR >= 2.

  X       (input) DOUBLE PRECISION array, dimension (LX)
          The parameter vector, partitioned as
          X = (wb(1), ..., wb(L), theta), where the vectors
          wb(i), of length NN*(L+2)+1, are parameters for the
          static nonlinearity, which is simulated by the
          SLICOT Library routine NF01AY. See the documentation of
          NF01AY for further details. The vector theta, of length
          N*(M + L + 1) + L*M, represents the matrices A, B, C,
          D and x(1), and it can be retrieved from these matrices
          by SLICOT Library routine TB01VD and retranslated by
          TB01VY.

  LX      (input) INTEGER
          The length of the array X.
          LX >= ( NN*(L+2)+1 )*L + N*(M + L + 1) + L*M.

  U       (input) DOUBLE PRECISION array, dimension (LDU, M)
          The leading NSMP-by-M part of this array must contain the
          set of input samples,
          U = ( U(1,1),...,U(1,M); ...; U(NSMP,1),...,U(NSMP,M) ).

  LDU     INTEGER
          The leading dimension of the array U.  LDU >= MAX(1,NSMP).

  Y       (output) DOUBLE PRECISION array, dimension (LDY, L)
          The leading NSMP-by-L part of this array contains the
          simulated output.

  LDY     INTEGER
          The leading dimension of the array Y.  LDY >= MAX(1,NSMP).

Workspace
  DWORK   DOUBLE PRECISION array, dimension (LDWORK)

  LDWORK  INTEGER
          The length of the array DWORK.
          LDWORK >= NSMP*L + MAX( 2*NN, (N + L)*(N + M) + 2*N +
                                  MAX( N*(N + L), N + M + L ) )
                                                           if M > 0;
          LDWORK >= NSMP*L + MAX( 2*NN, (N + L)*N + 2*N +
                                  MAX( N*(N + L), L ) ),   if M = 0.
          A larger value of LDWORK could improve the efficiency.

Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value.
Method
  BLAS routines are used for the matrix-vector multiplications and
  the routine NF01AY is called for the calculation of the nonlinear
  function.

Further Comments
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index