Function 'fmincon' not supported for code generation
19 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Anuschan Albrecht
le 8 Mai 2021
Commenté : Walter Roberson
le 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 commentaires
Walter Roberson
le 8 Mai 2021
Modifié(e) : Walter Roberson
le 11 Mai 2021
You need to provide options
Réponse acceptée
Aditya Patil
le 11 Mai 2021
Modifié(e) : Aditya Patil
le 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 commentaires
Walter Roberson
le 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!
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Refinement dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!