# Function 'fmincon' not supported for code generation

20 views (last 30 days)
Anuschan Albrecht on 8 May 2021
Commented: Walter Roberson on 12 May 2021
Hello,
im currently trying to implement nonlinear MPC in MATLAB/Simulink using the MATLAB function block.
function u_mpc = MPC(x, u_mpc, u_0, A_ineq, b_ineq, Q_mpc, R_mpc)
costfunc = @(x,u) (x)'*Q_mpc*(x) + (u_mpc)'*R_mpc*(u_mpc);
u_mpc = fmincon(costfunc, u_0, A_ineq, b_ineq);
end
The state x is provided by a plant model, the costfunction is a simple quadratic cost with weight matrices, the matrices are taken from the workspace.
Running the Simulink model results in the error: Function 'fmincon' not supported for code generation.
I'm using the 2018b version normally, tried using 2021a but got the same error.
Is there a mistake in the code or is it simply not possible to use fmincon inside a MATLAB function block?
Thanks in advance for any help.
##### 2 CommentsShowHide 1 older comment
Anuschan Albrecht on 8 May 2021
On the help page you linked it says to not load options from a file so I added them inside the MATLAB function block:
function u_mpc = MPC(x, u_mpc, u_0, A_ineq, b_ineq, Q_mpc, R_mpc)
costfunc = @(x,u) (x)'*Q_mpc*(x) + (u_mpc)'*R_mpc*(u_mpc);
options = optimoptions('fmincon','Algorithm','sqp');
u_mpc = fmincon(costfunc, u_0, A_ineq, b_ineq,options);
end
This results in the error: Function 'optimoptions' not supported for code generation.

Aditya Patil on 11 May 2021
Edited: Aditya Patil on 12 May 2021
fmincon codegen support was added in R2019b. Also, optimOptions is the last argument for fmincon, you should pass other arguments as empty ([]) if you are not using them. For example,
function u_mpc = MPC(x, u_mpc, u_0, A_ineq, b_ineq, Q_mpc, R_mpc)
costfunc = @(x,u) (x)'*Q_mpc*(x) + (u_mpc)'*R_mpc*(u_mpc);
options = optimoptions('fmincon','Algorithm','sqp');
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
u_mpc = fmincon(costfunc,u_0,A_ineq,b_ineq,Aeq,beq,lb,ub,nonlcon,options);
end
Walter Roberson on 12 May 2021
Good point about needing a later release! I normally think about that kind of issue early on, but I missed it this time!

### Categories

Find more on Manual Performance Optimization in Help Center and File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!

Translated by