nlmpcmove too many input arguments

Hello, I'm using nlmpc to perform just one prediction step.
I create my nlmpc object like this.
deterministicController = nlmpc(2, 2, 1);
deterministicController.PredictionHorizon = L;
generate a few parameters in a loop and build the prediction models and costs based off of those
deterministicController.Model.StateFcn = @(x,u) epsilons(l) * fNonlinear(x, u, npap) ...
+ (1-epsilons(l)) * fLinear(x, u, npap, xBar);
deterministicController.Model.OutputFcn = @(x,u) x;
deterministicController.Optimization.CustomCostFcn = ...
@(X, U, data) sum( (...
[U(1:data.PredictionHorizon,data.MVIndex(1))'; X(2:data.PredictionHorizon+1,1:2)']...
- zRef) .^2 );
The problem is unconstrained. I then perform just one evaluation with
uStar = nlmpcmove(deterministicController, xm1, um1);
which outputs
Error using nonlinear
Too many input arguments.
Error in znlmpc_getZBounds (line 36)
f1 = hCostFcn(X0, U0, e0, userdata, runtimedata.Parameters{:});
Error in nlmpc/nlmpcmove (line 122)
[zLB, zUB] = znlmpc_getZBounds(coredata, runtimedata, userdata, handles.hCostFcn, z0);
By the way xm1 is 2x1, bm1 is scalar and fLinear, fNonlinear are correct (previously tested, outputting 2x1).
I can provide the rest of the code. Thank you.

 Accepted Answer

I was wrong when setting up the cost function, the form should have been
deterministicController.Optimization.CustomCostFcn = ...
@(X, U, e, data) sum( (...
[U(1:data.PredictionHorizon,data.MVIndex(1))'; X(2:data.PredictionHorizon+1,1:2)']...
- zRef) .^2 );

More Answers (0)

Products

Release

R2021a

Community Treasure Hunt

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

Start Hunting!