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.

This email address is being protected from spambots. You need JavaScript enabled to view it. February 2, 2005; Updated: June 15, 2006