Documentation |
Simulate nonlinear ODE model
YS = sim(NLSYS,DATA)
YS = sim(NLSYS,DATA,'Noise');
YS = sim(NLSYS,DATA,X0INIT);
YS = sim(NLSYS,DATA,'Noise',XOINIT);
YS = sim(NLSYS,DATA,'Noise','InitialState',X0INIT);
[YS, YSD, XFINAL] = sim(NLSYS,DATA,'Noise','InitialState',X0INIT);
YS = sim(NLSYS,DATA) simulates the output of an idnlgrey model.
YS = sim(NLSYS,DATA,'Noise'); simulates the model with Gaussian noise added to YS.
YS = sim(NLSYS,DATA,X0INIT); simulates the model with the specified initial states.
YS = sim(NLSYS,DATA,'Noise',XOINIT); simulates the model with the specified initial states and with Gaussian noise added.
YS = sim(NLSYS,DATA,'Noise','InitialState',X0INIT); simulates the model with the specified initial states.
[YS, YSD, XFINAL] = sim(NLSYS,DATA,'Noise','InitialState',X0INIT); performs simulation starting with the specified initial states and with Gaussian noise added, and returns the final states of the model after the simulation is completed.
To simulate the model with user-defined noise, set the input DATA = [UIN E], where UIN is the input signal and E is the noise signal. UIN and E must both be one of the following:
iddata objects: E stores the noise signals as inputs, where the number of inputs matches the number of model outputs.
Matrices: E has as many columns as there are noise signals, corresponding to the number of model outputs.
NLSYS: idnlgrey model object.
DATA: Input-noise data [U E]. If E is omitted and 'Noise' is not given as an input argument, then a noise-free simulation is obtained. If E is omitted and 'Noise' is given as an input argument, then Gaussian noise created by randn(size(YS))*sqrtm(NLSYS.NoiseVariance) will be added to YS. If both E and 'Noise' are given, then E specifies the noise to add to YS. For time-continuous idnlgrey objects, DATA passed as a matrix will lead to that the data sample interval, Ts, is set to one.
X0INIT: Initial states. Can have the following values:
'zero' : Zero initial state x(0) with all states fixed (nlsys.InitialStates.Fixed is thus ignored).
'fixed' (default): Struct array (NLSYS.InitialState) determines the values of the model initial states and all states are fixed. (NLSYS.InitialStates.Fixed is ignored). Same as 'model'.
vector/matrix: Column vector of initial state values. For multiple experiment DATA, X0INIT may be a matrix whose columns give different initial states for each experiment. All initial states are kept fixed (nlsys.InitialStates.Fixed is thus ignored).
struct array : Nx-by-1 structure array with fields:
Name: Name of the state (a string).
Unit: Unit of the state (a string).
Value: Value of the states (a finite real 1-by-Ne vector, where Ne is the number of experiments.)
Minimum: Minimum values of the states (a real 1-by-Ne vector or a real scalar, in which case all initial states have the same minimum value).
Maximum: Maximum values of the states (a real 1-by-Ne vector or a real scalar, in which case all initial states have the same maximum value).
Fixed: True (or a 1-by-Ne vector of True values). Any false value is ignored.
YS: Simulated output. If DATA is an iddata object, then YS will also be an iddata object. Otherwise, YS will be a matrix where the k:th output is found in the k:th column of YS. If DATA is a multiple-experiment iddata object, then YS will be a multiple experiment object as well.
YSD: Empty vector ([].) In the future, it will contain the estimated standard deviation of the simulated output.
XFINAL: Final states computed. In the single experiment case it is a column vector of length Nx. For multi-experiment data, XFINAL is an Nx-by-Ne matrix with the ith column specifying the initial state of experiment i.
In this example you simulate an idnlgrey model for a data set z. This example uses the nlgr model created in idnlgreydemo2.
Load the data set and create an idnlgrey model.
load twotankdata;
Estimate the idnlgrey model.
% Specify file. FileName = 'twotanks_c'; % Specify model orders [ny nu nx]. Order = [1 1 2]; % Specify initial parameters. Parameters = {0.5; 0.0035; 0.019; ... 9.81; 0.25; 0.016}; % Specify initial states. InitialStates = [0; 0.1]; Ts = 0; nlgr = idnlgrey(FileName, Order, Parameters, ... InitialStates, Ts, ... 'Name', 'Two tanks');
Create an iddata object z from data z (from twotankdata.mat).
z = iddata([], u, 0.2, 'Name', 'Two tanks');
Simulate the model using the input signal from the data z.
sim(nlgr,z)
findstates(idnlgrey) | pe | pem | predict