## Linear Constraints

### What Are Linear Constraints?

Several optimization solvers accept linear constraints, which are restrictions on
the solution *x* to satisfy linear equalities or inequalities.
Solvers that accept linear constraints include `fmincon`

, `intlinprog`

, `linprog`

, `lsqlin`

, `quadprog`

, multiobjective solvers, and some Global Optimization Toolbox solvers.

### Linear Inequality Constraints

Linear inequality constraints have the form *A·x ≤ b*. When *A* is
*m*-by-*n*, there are *m*
constraints on a variable *x* with *n* components.
You supply the *m*-by-*n* matrix
*A* and the *m*-component vector
*b*.

Pass linear inequality constraints in the `A`

and
`b`

arguments.

For example, suppose that you have the following linear inequalities as constraints:

*x*_{1} +
*x*_{3} ≤
4,

2*x*_{2} –
*x*_{3} ≥
–2,

*x*_{1} –
*x*_{2} +
*x*_{3} –
*x*_{4} ≥ 9.

Here, *m* = 3 and *n* = 4.

Write these constraints using the following matrix *A* and vector
*b*:

$$\begin{array}{l}A=\left[\begin{array}{cccc}1& 0& 1& 0\\ 0& -2& 1& 0\\ -1& 1& -1& 1\end{array}\right],\\ b=\left[\begin{array}{c}4\\ 2\\ -9\end{array}\right].\end{array}$$

Notice that the “greater than” inequalities are first multiplied by
–1 to put them in “less than” inequality form. In MATLAB^{®} syntax:

A = [1 0 1 0; 0 -2 1 0; -1 1 -1 1]; b = [4;2;-9];

You do not need to give gradients for linear constraints; solvers calculate them automatically. Linear constraints do not affect Hessians.

Even if you pass an initial point `x0`

as a matrix, solvers pass
the current point *x* as a column vector to linear constraints. See
Matrix Arguments.

For a more complex example of linear constraints, see Set Up a Linear Program, Solver-Based.

Intermediate iterations can violate linear constraints. See Iterations Can Violate Constraints.

### Linear Equality Constraints

Linear equalities have the form *Aeq·x = beq*, which represents *m* equations with
*n*-component vector *x*. You supply the
*m*-by-*n* matrix *Aeq* and
the *m*-component vector *beq*.

Pass linear equality constraints in the `Aeq`

and
`beq`

arguments in the same way as described for the
`A`

and `b`

arguments in Linear Inequality Constraints.