quadprog
BackgroundCode generation is the conversion of MATLAB® code to C/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 an example, see Generate Code for quadprog. For code generation in other optimization solvers, see Generate Code for fmincon, Generate Code for fsolve, or Generate Code for lsqcurvefit or lsqnonlin.
quadprog
supports code generation using either the codegen
(MATLAB Coder) 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.
Code generation targets do not use the same math kernel libraries as MATLAB solvers. Therefore, code generation solutions can vary from solver solutions, especially for poorly conditioned problems.
quadprog
does not support the problem
argument for code
generation.
[x,fval] = quadprog(problem) % Not supported
All quadprog
input matrices such as A
,
Aeq
, lb
, and ub
must be
full, not sparse. You can convert sparse matrices to full by using the full
function.
The lb
and ub
arguments must have the same
number of entries as the number of columns in H
or must be empty
[]
.
For advanced code optimization involving embedded processors, you also need an Embedded Coder® license.
You must include options for quadprog
and specify them using
optimoptions
. The options must include the
Algorithm
option, set to 'active-set'
.
options = optimoptions('quadprog','Algorithm','active-set'); [x,fval,exitflag] = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options);
Code generation supports these options:
Algorithm
— Must be 'active-set'
ConstraintTolerance
MaxIterations
ObjectiveLimit
OptimalityTolerance
StepTolerance
Generated code has limited error checking for options. The recommended way to update
an option is to use optimoptions
, not dot notation.
opts = optimoptions('quadprog','Algorithm','active-set'); 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.
If you specify an option that is not supported, the option is typically ignored during code generation. For reliable results, specify only supported options.
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, 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).
optimoptions
| quadprog
| codegen
(MATLAB Coder)