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