Matlab

Before generating code for a parametric problem, the problem should be first specified in the setup phase. See Setup for more details.

Codegen

The code is generated by running

m.codegen(dir_name, varargin)

The argument dir_name is the name of a directory where the generated code is stored. The second argument varargin specifies additional codegen options shown in the following table

Option Description Allowed values
project_type Build environment
'' (default)
'Makefile'
'MinGW Makefiles'
'Unix Makefiles'
'CodeBlocks'
'Xcode'
parameters Problem parameters
'vectors' (default)
'matrices'
mexname Name of the compiled mex interface
'emosqp' (default)
Nonempty string
force_rewrite Rewrite existing directory
false (default)
true

You can pass the options as field-value pairs, e.g.,

m.codegen('code', 'parameters', 'matrices', 'mexname', 'emosqp');

If the project_type argument is not passed or is set to '', then no build files are generated.

Mex interface

Once the code is generated the following functions are provided through its mex interface. Each function is called as

emosqp('function_name');

where emosqp is the name of the mex interface specified in the previous section

emosqp('solve')

Solve the problem.

Returns:multiple variables [x, y, status_val, iter, run_time]
  • x (ndarray) - Primal solution
  • y (ndarray) - Dual solution
  • status_val (int) - Status value as in Status values
  • iter (int) - Number of iterations
  • run_time (double) - Run time
emosqp('update_lin_cost', q_new)

Update linear cost.

Parameters:q_new (ndarray) – New linear cost vector
emosqp('update_lower_bound', l_new)

Update lower bound in the constraints.

Parameters:l_new (ndarray) – New lower bound vector
emosqp('update_upper_bound', u_new)

Update upper bound in the constraints.

Parameters:u_new (ndarray) – New upper bound vector
emosqp('update_bounds', l_new, u_new)

Update lower and upper bounds in the constraints.

Parameters:
  • l_new (ndarray) – New lower bound vector
  • u_new (ndarray) – New upper bound vector

If the code is generated with the option parameters set to 'matrices', then the following functions are also provided

emosqp('update_P', Px, Px_idx, Px_n)

Update nonzero entries of the quadratic cost matrix.

Parameters:
  • Px (ndarray) – Values of entries to be updated
  • Px_idx (ndarray) – Indices of entries to be updated. Pass [] if all the indices are to be updated
  • Px_n (int) – Number of entries to be updated. Used only if Px_idx is not [].
emosqp('update_A', Ax, Ax_idx, Ax_n)

Update nonzero entries of the constraint matrix.

Parameters:
  • Ax (ndarray) – Values of entries to be updated
  • Ax_idx (ndarray) – Indices of entries to be updated. Pass [] if all the indices are to be updated
  • Ax_n (int) – Number of entries to be updated. Used only if Ax_idx is not [].
emosqp('update_P_A', Px, Px_idx, Px_n, Ax, Ax_idx, Ax_n)

Update nonzero entries of the quadratic cost and constraint matrices.

Parameters:
  • Px (ndarray) – Values of entries to be updated
  • Px_idx (ndarray) – Indices of entries to be updated. Pass [] if all the indices are to be updated
  • Px_n (int) – Number of entries to be updated. Used only if Px_idx is not [].
  • Ax (ndarray) – Values of entries to be updated
  • Ax_idx (ndarray) – Indices of entries to be updated. Pass [] if all the indices are to be updated
  • Ax_n (int) – Number of entries to be updated. Used only if Ax_idx is not [].

You can update all the nonzero entries in matrix \(A\) by running

emosqp('update_A', Ax_new, [], 0);

See C/C++ Sublevel API for more details on the input arguments.