Least squares

To solve a linear least-squares problem, simply build the matrices that define it and call the solve_ls() function:

from numpy import array, dot
from qpsolvers import solve_ls

R = array([[1., 2., 0.], [-8., 3., 2.], [0., 1., 1.]])
s = array([3., 2., 3.])
G = array([[1., 2., 1.], [2., 0., 1.], [-1., 2., -1.]])
h = array([3., 2., -2.]).reshape((3,))

x_sol = solve_ls(R, s, G, h, solver="osqp")
print(f"LS solution: x = {x}")

The backend QP solver is selected among supported solvers via the solver keyword argument. This example outputs the solution [-0.0530504, 0.0265252, 2.1061008].

qpsolvers.solve_ls(R, s, G=None, h=None, A=None, b=None, lb=None, ub=None, W=None, solver=None, initvals=None, sym_proj=False, verbose=False, **kwargs)

Solve a constrained weighted linear Least Squares problem defined as:

\[\begin{split}\begin{split}\begin{array}{ll} \underset{x}{\mbox{minimize}} & \frac12 \| R x - s \|^2_W = \frac12 (R x - s)^T W (R x - s) \\ \mbox{subject to} & G x \leq h \\ & A x = b \\ & lb \leq x \leq ub \end{array}\end{split}\end{split}\]

using the QP solver selected by the solver keyword argument.

  • R (Union[ndarray, csc_matrix]) – Union[np.ndarray, spa.csc_matrix] factor of the cost function (most solvers require \(R^T W R\) to be positive definite, which means \(R\) should have full row rank).

  • s (ndarray) – Vector term of the cost function.

  • G (Union[ndarray, csc_matrix, None]) – Linear inequality matrix.

  • h (Optional[ndarray]) – Linear inequality vector.

  • A (Union[ndarray, csc_matrix, None]) – Linear equality matrix.

  • b (Optional[ndarray]) – Linear equality vector.

  • lb (Optional[ndarray]) – Lower bound constraint vector.

  • ub (Optional[ndarray]) – Upper bound constraint vector.

  • W (Union[ndarray, csc_matrix, None]) – Definite symmetric weight matrix used to define the norm of the cost function. The standard L2 norm (W = Identity) is used by default.

  • solver (Optional[str]) – Name of the QP solver, to choose in qpsolvers.available_solvers. This argument is mandatory.

  • initvals (Optional[ndarray]) – Vector of initial x values used to warm-start the solver.

  • sym_proj (bool) – Set to True when the R matrix provided is not symmetric.

  • verbose (bool) – Set to True to print out extra information.

Return type



Optimal solution if found, otherwise None.


Extra keyword arguments given to this function are forwarded to the underlying solvers. For example, OSQP has a setting eps_abs which we can provide by solve_ls(R, s, G, h, solver='osqp', eps_abs=1e-4).

See the examples/ folder in the repository for more advanced use cases. For a more general introduction you can also check out this post on least squares in Python.