Function 'fmincon' not supported for code generation
27 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Anuschan Albrecht
am 8 Mai 2021
Kommentiert: Walter Roberson
am 12 Mai 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 Kommentare
Walter Roberson
am 8 Mai 2021
Bearbeitet: Walter Roberson
am 11 Mai 2021
You need to provide options
Akzeptierte Antwort
Aditya Patil
am 11 Mai 2021
Bearbeitet: Aditya Patil
am 12 Mai 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
9 Kommentare
Walter Roberson
am 12 Mai 2021
Good point about needing a later release! I normally think about that kind of issue early on, but I missed it this time!
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Refinement finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!