Setting up the problem
In Simulink, an s-function block can be used to solve a quadratic program. The s-function needs to link to the compiled c-code called “daqp_sfunc”. To compile the c-code, the following matlab-script can be used in the terminal:
make_sfunc()
Note: Please make sure to have a C-compiler installed on your system and linked in matlab. This can be checked by running mex -setup
in the terminal:
After the c-code has been compiled, a new file called daqp_sfunc.mexw64
(windows) or daqp_sfunc.mexa64
(linux, mac) should be found.
The corresponding S-function block has the following inputs:
Inputs | Description | Size |
---|---|---|
\(H\) | The Hessian matrix of the quadratic objective function | [ \(n\) x \(n\) ] |
\(f\) | The linear part of the objective function | [ \(n\) x 1 ] |
\(A\) | The matrix of linear constraints | [ \(m_g\) x \(n\) ] |
\(b_l\) | The lower bound of the linear constraints | [ \(m\) x 1 ] |
\(b_u\) | The upper bound of the linear constraints | [ \(m\) x 1 ] |
sense | The type of the constraints | [ \(m\) x 1 ] |
Note: When \(b_u\) and \(b_l\) have more elements than the number of rows in \(A\) the first elements in \(b_u\) and \(b_l\) are interpreted as simple bounds.
The following parameters are used to set up the problem and need to be set in the mask of the s-function block:
Parameters | Description | Size |
---|---|---|
maxIter | Maximum number of iterations | 1 |
The block has the following outputs:
Outputs | Description | Size |
---|---|---|
\(x\) | The optimal solution | [ \(n\) x 1 ] |
\(\lambda\) | The optimal Lagrange multipliers | [ \(m\) x 1 ] |
\(f_{val}\) | The optimal value of the objective function | 1 |
exitflag | The exit flag of the solver | 1 |
iter | The number of iterations used by the solver | 1 |