improve the performance of system identification MISO

7 views (last 30 days)
with the following identification program reaches the 40% as I can improve. thanks
load datoshistoricos.txt;
datoshistoricos;
u1=datoshistoricos(:,1);
u2=datoshistoricos(:,2);
u3=datoshistoricos(:,3);
u4=datoshistoricos(:,4);
u = [u1 u2 u3 u4];
y=datoshistoricos(:,5);
ts = 0.04;
data = iddata(y,u,0.2);
get(data)
advice(data)
datae = misdata(data,idarx);
advice(datae)
m1 = nlarx(datae, [4 4*ones(1,4) zeros(1,4)], 'linear', 'focus', 'sim');
model = arx(datae, [4 4*ones(1,4) zeros(1,4)], 'focus', 'simulation');
compare(datae,m1)
m2 = nlarx(datae,[4 4*ones(1,4) zeros(1,4)],'tree')
compare(datae,m2)

Answers (1)

Rajiv Singh
Rajiv Singh on 26 Jun 2013
There are different types of choices to consider to get the most out of an identification:
  • Model orders: controlled by orders [na nb nk]: these configure model regressors, which are related to how much memory you need in the model to compute the outputs. nk can be determined by a separate analysis of the amount of delay in the system. You can try various values of na, nb and compare the results obtained on estimation and perhaps also an independent test (validation) dataset.
  • Custom regressors: The orders na, nb generate what are called the standard regressors which are simply the delayed I/O variables used for computing the output. You can also add your own regressors which are nonlinear functions of the I/O variables. For example, in memory polynomial models it is quite common to include regressors that are polynomials of I/O variables. See polyreg, addreg for example.
  • Type of nonlinearity: you can try sigmoidnet and wavenet too to see if they help model the behavior better than the tree partition function. If using custom regressors, you may also want to try omitting the nonlinearity by using "linear" as the type of nonlinearity, as in: model = nlarx(datae, Orders, []) where the last input argument means that we are simply using a weighted sum of regressors to compute the output. See http://www.mathworks.com/help/ident/ug/identifying-nonlinear-arx-models.html
  • The chosen nonlinear function also needs to be configured to improve the fit, usually by adjusting the number of units. See the reference pages for treepartition, wavenet etc for more information. You can replace the string representing the nonlinear function in the call to nlarx (e.g., 'tree') with an object representing the same function but with properties configured to desired values. For example:
NL = treepartition('NumberOfUnits',20);
model = nlarx(datae, Orders, NL);
  • Search options: Try adjusting the choice of SearchMethod and MaxIter. These help out in case the estimation stopped because of numerical optimization issues (local minima, slow progress).

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!