Code generation is the conversion of MATLAB® code to C code using MATLAB Coder™. Code generation requires a MATLAB Coder license.
Typically, you use code generation to deploy code on hardware that is not running
MATLAB. For example, you can deploy code on a robot, using
fmincon for optimizing movement or planning.
fmincon supports code generation using either the
codegen function or the MATLAB
Coder app. You must have a MATLAB
Coder license to generate code.
The target hardware must support standard double-precision floating-point computations. You cannot generate code for single-precision or fixed-point computations.
All code for generation must be MATLAB code. In particular, you cannot use a custom black-box function as an
objective function for
fmincon. You can use
coder.ceval to evaluate a custom function coded in C or C++.
However, the custom function must be called in a MATLAB function.
fmincon does not support the
problem argument for code
[x,fval] = fmincon(problem) % Not supported
You must specify the objective function and any nonlinear constraint function by using function handles, not strings or character names.
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported % Not supported: fmincon('fun',...) or fmincon("fun",...)
fmincon input matrices such as
ub must be
full, not sparse. You can convert sparse matrices to full by using the
ub arguments must have either the
same number of entries as the
x0 argument or must be empty
For advanced code optimization involving embedded processors, you also need an Embedded Coder® license.
You must include options for
fmincon and specify them using
optimoptions. The options must include the
Algorithm option, set to
options = optimoptions('fmincon','Algorithm','sqp'); [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
Code generation supports these options:
Algorithm — Must be
Generated code has limited error checking for options. So the recommended way to
update an option is to use
optimoptions, not dot notation.
opts = optimoptions('fmincon','Algorithm','sqp'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
Do not load options from a file. Doing so can cause code generation to fail. Instead, create options in your code.
Usually, if you specify an option that is not supported, the option is silently ignored during code generation. However, if you specify a plot function or output function by using dot notation, code generation can error. For reliability, specify only supported options.
Because output functions and plot functions are not supported,
fmincon does not return exit flag –1.
By default, generated code for use outside the MATLAB environment uses linear algebra libraries that are not multithreaded. Therefore, this code can run significantly slower than code in the MATLAB environment.
If your target hardware has multiple cores, then you can achieve better performance by using custom multithreaded LAPACK and BLAS libraries. To incorporate these libraries in your generated code, see Speed Up Linear Algebra in Generated Standalone Code by Using LAPACK Calls (MATLAB Coder).