Simulate nonlinear ARX model in Simulink software
System Identification Toolbox
The IDNLARX Model block simulates a nonlinear ARX (
model for time-domain input and output data.
Input signal to the model.
For multi-input models, specify the input as an
Nu is the number of inputs. For example,
you can use a Vector Concatenate block
to concatenate scalar signals into a vector signal.
Simulated output from the model.
idnlarx variable in the MATLAB® workspace.
Specifies the initial states as one of the following:
Input and output values: Specify
the input and output levels, as follows:
If known, enter a vector of length equal to the number of model inputs. If you enter a scalar, it is the signal value for all inputs.
If known, enter a vector of length equal to the number of model's outputs. If you enter a scalar, it is the signal value for all outputs.
State values: When selected, you
must specify a vector of length equal to the number of states in the
model in the Vector of state values field.
If you do not know the initial states, you can estimate these states, as follows:
To simulate around a given input level when you do
not know the corresponding output level, you can estimate the equilibrium
state values using the
For example, to simulate a model
a steady-state point where the input is
1 and the
output is unknown, you can enter
X0, such that:
X0 = findop(M,'steady',1,NaN)
To estimate the initial states that provide a best
fit between measured data and the simulated response of the model
for the same input, use the
For example, to compute initial states such that the response
of the model
M matches the output data in the data
z, you can enter
X0 = findstates(M,z,,'sim')
To continue a simulation from a previous run, use
the simulated input-output values from the previous simulation to
compute the initial states
X0 for the current
For example, suppose that
a variable that stores the input and output values from a previous
simulation. For a model
M, you can enter
X0 = data2state(M,firstSimData)
Load the sample data.
Create a data object from sample data.
z = iddata(y,u,0.2,'Tstart',0,'Name','Two tank system'); z1 = z(1:1000);
Estimate a nonlinear ARX model.
mw1 = nlarx(z1,[5 1 3],wavenet('NumberOfUnits',8));
Open a preconfigured Simulink model.
model = fullfile(matlabroot,'examples','ident','ex_idnlarx_block'); open_system(model);
The model uses the Iddata Source, Nonlinear ARX Model, and Scope blocks. The following block parameters have been preconfigured to specify the estimation data, estimated model, and input and output levels:
1. Block parameters of Iddata Source block:
IDDATA Object -
2. Block parameters of Nonlinear ARX Model block:
Initial conditions - Input and output values (default)
Input level - 10
Output level - 0.1
Run the simulation.
Click the Scope block to view the difference between measured output and model output.
To reduce the difference between the measured and simulated responses, estimate an initial state vector for the model from the estimation data,
x0 = findstates(mw1,z1,,'simulation');
Set the Initial Conditions block parameter value of the Nonlinear ARX Model block to
Specify initial states as
Run the simulation, and view the difference between measured output and model output.