lolimotDemo3 Demo 3: Static process with 2 inputs and 2 outputs
LoLiMoT - Nonlinear System Identification Toolbox
Torsten Fischer, 20-October-2011
Institute of Mechanics & Automatic Control, University of Siegen, Germany
Copyright (c) 2012 by Prof. Dr.-Ing. Oliver Nelles
LMN = lolimot;
[u1g u2g] = meshgrid(linspace(0,1,25), linspace(0,1,25));
u1 = u1g(:);
u2 = u2g(:);
y1 = 1./(0.1+u1) + (2*u2).^2;
y2 = u1.*u2;
y2 = y2 + 0.2*randn(size(y2))*(max(y2)-min(y2));
LMN.input = [u1 u2];
LMN.output = [y1, y2];
LMN.maxNumberOfLM = 15;
LMN.minError = 0.05;
LMN.kStepPrediction = 0;
LMN.history.displayMode = true;
LMN.xRegressorDegree = 1;
LMN = LMN.train;
[u1G u2G] = meshgrid(linspace(0,1,30), linspace(0,1,30));
u1G = u1G(:);
u2G = u2G(:);
y1G = 1./(0.1+u1G) + (2*u2G).^2;
y2G = u1G.*u2G;
yGModel = calculateModelOutput(LMN, [u1G u2G], [y1G y2G]);
JG = calcGlobalLossFunction(LMN, [y1G y2G], yGModel);
figure
LMN.plotModel([1 2],1)
figure
LMN.plotModel([1 2],2)
figure
LMN.plotPartition
xInputDelay is empty, defaults are used: xInputDelay(1:p) = {0}
zInputDelay is empty, defaults are used: zInputDelay(1:p) = {0}
xOutputDelay is empty, defaults are used: xOutputDelay(1:p) = {[]}
zOutputDelay is empty, defaults are used: zOutputDelay(1:p) = {[]}
Initial net has 1 local linear model(s): J = 0.626324.
1. Iteration. Number of local linear models = 1. Checking for split of model 1 ...
Testing split in dimension 1 with ratio 0.50: J = 0.505950.
Testing split in dimension 2 with ratio 0.50: J = 0.586840.
-> Splitting in dimension 1 with ratio 0.50: J = 0.505950 and penalty = 0.510598.
2. Iteration. Number of local linear models = 2. Checking for split of model 2 ...
Testing split in dimension 1 with ratio 0.50: J = 0.435335.
Testing split in dimension 2 with ratio 0.50: J = 0.501448.
-> Splitting in dimension 1 with ratio 0.50: J = 0.435335 and penalty = 0.440570.
3. Iteration. Number of local linear models = 3. Checking for split of model 3 ...
Testing split in dimension 1 with ratio 0.50: J = 0.429830.
Testing split in dimension 2 with ratio 0.50: J = 0.420472.
-> Splitting in dimension 2 with ratio 0.50: J = 0.420472 and penalty = 0.426425.
4. Iteration. Number of local linear models = 4. Checking for split of model 4 ...
Testing split in dimension 1 with ratio 0.50: J = 0.381789.
Testing split in dimension 2 with ratio 0.50: J = 0.415637.
-> Splitting in dimension 1 with ratio 0.50: J = 0.381789 and penalty = 0.388263.
5. Iteration. Number of local linear models = 5. Checking for split of model 5 ...
Testing split in dimension 1 with ratio 0.50: J = 0.381080.
Testing split in dimension 2 with ratio 0.50: J = 0.373932.
-> Splitting in dimension 2 with ratio 0.50: J = 0.373932 and penalty = 0.380832.
6. Iteration. Number of local linear models = 6. Checking for split of model 7 ...
Testing split in dimension 1 with ratio 0.50: J = 0.372287.
Testing split in dimension 2 with ratio 0.50: J = 0.372504.
-> Splitting in dimension 1 with ratio 0.50: J = 0.372287 and penalty = 0.380060.
7. Iteration. Number of local linear models = 7. Checking for split of model 6 ...
Testing split in dimension 1 with ratio 0.50: J = 0.370983.
Testing split in dimension 2 with ratio 0.50: J = 0.371039.
-> Splitting in dimension 1 with ratio 0.50: J = 0.370983 and penalty = 0.379627.
8. Iteration. Number of local linear models = 8. Checking for split of model 8 ...
Testing split in dimension 1 with ratio 0.50: J = 0.357113.
Testing split in dimension 2 with ratio 0.50: J = 0.365156.
-> Splitting in dimension 1 with ratio 0.50: J = 0.357113 and penalty = 0.366517.
9. Iteration. Number of local linear models = 9. Checking for split of model 11 ...
Testing split in dimension 1 with ratio 0.50: J = 0.355982.
Testing split in dimension 2 with ratio 0.50: J = 0.355506.
-> Splitting in dimension 2 with ratio 0.50: J = 0.355506 and penalty = 0.365505.
10. Iteration. Number of local linear models = 10. Checking for split of model 10 ...
Testing split in dimension 1 with ratio 0.50: J = 0.355108.
Testing split in dimension 2 with ratio 0.50: J = 0.354057.
-> Splitting in dimension 2 with ratio 0.50: J = 0.354057 and penalty = 0.364689.
11. Iteration. Number of local linear models = 11. Checking for split of model 9 ...
Testing split in dimension 1 with ratio 0.50: J = 0.354009.
Testing split in dimension 2 with ratio 0.50: J = 0.348044.
-> Splitting in dimension 2 with ratio 0.50: J = 0.348044 and penalty = 0.359016.
12. Iteration. Number of local linear models = 12. Checking for split of model 13 ...
Testing split in dimension 1 with ratio 0.50: J = 0.347516.
Testing split in dimension 2 with ratio 0.50: J = 0.347311.
-> Splitting in dimension 2 with ratio 0.50: J = 0.347311 and penalty = 0.359075.
13. Iteration. Number of local linear models = 13. Checking for split of model 15 ...
Testing split in dimension 1 with ratio 0.50: J = 0.346897.
Testing split in dimension 2 with ratio 0.50: J = 0.345686.
-> Splitting in dimension 2 with ratio 0.50: J = 0.345686 and penalty = 0.358263.
14. Iteration. Number of local linear models = 14. Checking for split of model 12 ...
Testing split in dimension 1 with ratio 0.50: J = 0.345539.
Testing split in dimension 2 with ratio 0.50: J = 0.344465.
-> Splitting in dimension 2 with ratio 0.50: J = 0.344465 and penalty = 0.357589.
Maximum number of local models reached.
Final net has 15 local models and 90 parameters: J = 0.344465
Net 15 with 15 LMs and 90 parameters is suggested as the model with the best complexity trade-off.
Plot model for dimensions 1 and 2.
Plot model for dimensions 1 and 2.
ans =
1×29 cell array
Columns 1 through 13
[] [] [] [] [] [] [] [] [] [] [] [] []
Columns 14 through 19
[1×1 Line] [] [1×1 Line] [1×1 Line] [1×1 Line] [1×1 Line]
Columns 20 through 24
[1×1 Line] [1×1 Line] [1×1 Line] [1×1 Line] [1×1 Line]
Columns 25 through 29
[1×1 Line] [1×1 Line] [1×1 Line] [1×1 Line] [1×1 Line]