The Fortran routines for linear systems identification are aimed to estimate state space models and covariance matrices of linear discrete-time multivariable systems, using the available input-output data sequences. The main features and options are:

  • two algorithmic subspace-based approaches:
    • MOESP - Multivariable Output-Error state SPace identification
    • N4SID - Numerical algorithms for Subspace State Space System IDentification
    • and their combination
  • standard or fast techniques for data compression (including abilities to exploit the block-Hankel structure)
  • multiple (possibly connected) data batches processing
  • availability of both, fully documented drivers and computational routines
  • the use of structure exploiting algorithms and dedicated linear algebra tools
  • optionally, the quality of the intermediate results can be assessed by inspecting the associated condition numbers.

A list of the implemented Fortran routines with links to the associated .html documentation is given in the following table, where * denotes auxiliary routines:

IB01AD Input-output data preprocessing and finding the system order
IB01BD Estimating the system matrices, covariances, and Kalman gain
IB01CD Estimating the initial state and the system matrices B and D
IB01MD * Upper triangular factor in the QR factorization of the concatenated input and output block-Hankel matrices
IB01ND * Singular value decomposition giving the system order
IB01OD * Estimating the system order
IB01OY * User's confirmation of the system order
IB01PD * Estimating the system matrices and covariances
IB01PX * Estimating the matrices B and D of a system using Kronecker products
IB01PY * Estimating the matrices B and D of a system exploiting the special structure
IB01QD * Estimating the initial state and the matrices B and D of a system, using A, C, and the input-output data sequences
IB01RD * Estimating the initial state of a system, using (A, B, C, D), and the input-output data sequences

The Fortran routines for Wiener systems are aimed to estimate the parameters of discrete-time multivariable Wiener systems, using the available input-output data sequences. The main features and options are:

  • an efficient three step procedure:
    • find an approximate linear model, using a combination of MOESP and N4SID
    • approximate the nonlinear part, modelled as a single layer neural network, using the simulated output of the estimated linear system and the available input-output data
    • optimize the parameters of the whole system by a Levenberg-Marquardt algorithm, using the initialization provided by the previous two steps
  • the use of the output normal form of the linear model
  • a Levenberg-Marquardt algorithm using block QR factorization with column pivoting, which is a specialized, structure-exploiting, LAPACK-based implementation of the approach used in the MINPACK package (Argonne National Laboratory, U.S.A.)
  • by suitable reordering of the parameters, the Jacobian matrices of the whole system are in a block diagonal form, with an additional right block column
  • option for rank determinations by incremental condition estimation.

A list of the implemented Fortran routines with links to the associated .html documentation is given in the following table:

IB03AD Estimating a set of parameters for approximating a Wiener system in a least-squares sense, using a neural network approach and a Levenberg-Marquardt algorithm (Cholesky-based or conjugate gradients solver)
IB03BD Estimating a set of parameters for approximating a Wiener system in a least-squares sense, using a neural network approach and a MINPACK-like Levenberg-Marquardt algorithm
MD03AD Minimizing the sum of the squares of m nonlinear error functions in n variables, x, by a Levenberg-Marquardt algorithm (Cholesky-based or conjugate gradients solver)
MD03BD Minimizing the sum of the squares of m nonlinear error functions in n variables, x, by a MINPACK-like Levenberg-Marquardt algorithm
MB02YD * Solution of a system of linear equations A*x = b, D*x = 0, in the least squares sense, with D a diagonal matrix, given a QR factorization with column pivoting of A
MB04OW * Rank-one update of a Cholesky factorization for a 2-by-2 block matrix
MD03BX * QR factorization with column pivoting and error vector transformation for standard nonlinear least squares problems
MD03BY * Finding the Levenberg-Marquardt parameter for standard nonlinear least squares problems
NF01AD * Computing the output of a Wiener system
NF01AY * Computing the output of a set of neural networks
NF01BD * Computing the Jacobian of a Wiener system
NF01BP * Finding the Levenberg-Marquardt parameter
NF01BQ * Solution of a system of linear equations J*x = b, D*x = 0, in the least squares sense, with D a diagonal matrix, given a block QR factorization with column pivoting of J
NF01BR * Solution of the linear system op(R)*x = b, with op(R) = R or transpose(R), and R block upper triangular stored in a compressed form
NF01BS * Block QR factorization of a structured Jacobian matrix
NF01BU * Computing J'*J + c*I, for the Jacobian J given in a compressed form
NF01BV * Computing J'*J + c*I, for a full Jacobian J (one output variable)
NF01BW * Matrix-vector product x <-- (J'*J + c*I)*x, for J in a compressed form
NF01BX * Matrix-vector product x <-- (A'*A + c*I)*x, for a full matrix A
NF01BY * Computing the Jacobian of the error function for a neural network (for one output variable)
TB01VD * Conversion of a discrete-time system to output normal form
TB01VY * Conversion of the output normal form of a discrete-time system to a state-space representation
TF01MX * Output response of a linear discrete-time system, given a general system matrix (each output is a column of the result)
TF01MY * Output response of a linear discrete-time system, given the system matrices (each output is a column of the result)

The documentation of all routines is also accessible from the SLICOT Library main index (in case of the drivers, or user-callable routines), or from the SLICOT Supporting Routines index (in case of the auxiliary routines, marked with * in the two tables above). The SLICOT Supporting Routines index is also accessible from the main Library index.


Vasile Sima, February 2, 2005; Updated: June 15, 2006