nlobj.PredictionHorizon = 10;
nlobj.ControlHorizon = 10;
nlobj.Model.StateFcn = @mystateFunctionREDUCED;
nlobj.Model.IsContinuousTime = true;
nlobj.Model.NumberOfParameters = 5;
nlobj.Model.OutputFcn = @OutputFcn
nlobj =
nlmpc with properties:
Ts: 0.1000
PredictionHorizon: 10
ControlHorizon: 10
Dimensions: [1x1 struct]
Model: [1x1 struct]
States: [1x4 struct]
OutputVariables: [1x2 struct]
ManipulatedVariables: [1x3 struct]
MeasuredDisturbances: []
Weights: [1x1 struct]
Optimization: [1x1 struct]
Jacobian: [1x1 struct]
Passivity: [1x1 struct]
nloptions = nlmpcmoveopt;
nloptions.Parameters = {rho,l,g,J,m};
nlobj.Weights.ManipulatedVariablesRate = [0 0 0];
nlobj.Weights.OutputVariables = [1 1];
[mv,nloptions,info] = nlmpcmove(nlobj,xk,lastMV,yref',[],nloptions);
ODEFUN = @(t,xk) statefcn(xk,mv);
[TOUT,XOUT] = ode45(ODEFUN,[0 Ts], xHistory(k,:)');
x0 = mystateFunctionREDUCED(x0,mv,rho,l,g,J,m)*Ts+x0;
xHistory(k+1,:) = XOUT(end,:);
end
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 4.5082e-04
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0022
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0011
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0016
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0011
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0026
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 9.0921e-04
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0043
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0015
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0016
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0012
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0043
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 376
Cost: 0.0038
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0039
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0038
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0044
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0033
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0058
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 368
Cost: 0.0070
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0078
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0080
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0135
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0106
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0131
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0106
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0147
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0164
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0207
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0126
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0370
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0264
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0391
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0292
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0378
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0405
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0364
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0793
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0909
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0338
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.1120
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0730
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.1066
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 396
Cost: 0.2542
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0513
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 49
Cost: 2.7287
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0394
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 371
Cost: 1.3647
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.0235
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 1.0635
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.3331e-15
ExitFlag: -2
Iterations: 127
Cost: 0.3550
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.1137e-05
ExitFlag: -2
Iterations: 400
Cost: 0.2180
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 6.4044e-07
ExitFlag: -2
Iterations: 400
Cost: 0.1319
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.4371e-06
ExitFlag: -2
Iterations: 400
Cost: 0.2906
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.9936e-05
ExitFlag: -2
Iterations: 400
Cost: 0.2929
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.4622
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.4848
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.5704
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.0889e-15
ExitFlag: -2
Iterations: 41
Cost: 7.1638
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.1860e-04
ExitFlag: -2
Iterations: 400
Cost: 1.3670
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.3120e-05
ExitFlag: -2
Iterations: 400
Cost: 1.0134
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 1.0949
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 0.6708
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 365
Cost: 1.6059
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 7.2360
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 24
Cost: 9.9478
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 149
Cost: 22.8306
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 197
Cost: 5.6771
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 33
Cost: 34.2812
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 2.9394
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 5.7473e-21
ExitFlag: -2
Iterations: 172
Cost: 84.2870
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.8706e-05
ExitFlag: -2
Iterations: 165
Cost: 10.4991
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.8645e-05
ExitFlag: -2
Iterations: 4
Cost: 12.4464
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.9083e-05
ExitFlag: -2
Iterations: 48
Cost: 10.5646
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 4.5863e-04
ExitFlag: -2
Iterations: 400
Cost: 24.6209
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.2483e-05
ExitFlag: -2
Iterations: 83
Cost: 6.9594
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.0035e-05
ExitFlag: -2
Iterations: 400
Cost: 4.8111
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 5.2929e-05
ExitFlag: -2
Iterations: 400
Cost: 11.6251
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 2.4589e-04
ExitFlag: -2
Iterations: 400
Cost: 5.1267
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 1.6663e-04
ExitFlag: -2
Iterations: 367
Cost: 18.6652
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 2.0743
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 16.6244
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 20.4956
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 157
Cost: 9.0522
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 8.0570
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 313
Cost: 7.4180
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 4.9903
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 16.4311
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 3.9882
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 75.0001
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 3.7069
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 135
Cost: 22.3938
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 4.2439
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 3.4832
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 5.3102
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 6.0702
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0
ExitFlag: -2
Iterations: 400
Cost: 8.5846
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 8.2603e-18
ExitFlag: -2
Iterations: 170
Cost: 1.8330
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 3.8335e-04
ExitFlag: -2
Iterations: 400
Cost: 5.1176
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 4.1342e-05
ExitFlag: -2
Iterations: 400
Cost: 27.6394
info =
MVopt: [11x3 double]
Xopt: [11x4 double]
Yopt: [11x2 double]
Topt: [11x1 double]
Slack: 0.0223
ExitFlag: -2
Iterations: 252
Cost: 110.2286
function z = mystateFunctionREDUCED(x,u,rho,l,g,J,m)
z(2) = (rho/l*u(3)+(rho^2/l)*(m*x(1)*x(4)^2-m*g*sin(x(3)+u(1)*sin(x(3)+u(2)))))/(1+rho^2*m/l);
z(4) = (-1/x(1))*(2*x(2)*x(4)+g*cos(x(3)))+1/(m*x(1))*u(1)*cos(x(3)+u(2));
function y = OutputFcn(x,u,rho,l,g,J,m)
function f = statefcn(in1,in2)
z(2) = (rho/l*u(3)+(rho^2/l)*(m*x(1)*x(4)^2-m*g*sin(x(3)+u(1)*sin(x(3)+u(2)))))/(1+rho^2*m/l);
z(4) = (-1/x(1))*(2*x(2)*x(4)+g*cos(x(3)))+1/(m*x(1))*u(1)*cos(x(3)+u(2));
f = [z(1);z(2);z(3);z(4)];