# How to Use All Types of Constraints

This example is a nonlinear minimization problem with all possible types of constraints. The example does not use gradients.

The problem has five variables, `x(1)` through `x(5)`. The objective function is a polynomial in the variables.

$f\left(x\right)=6{x}_{2}{x}_{5}+7{x}_{1}{x}_{3}+3{x}_{2}^{2}$.

The objective function is in the local function `myobj(x)`, which is nested inside the function `fullexample`. The code for `fullexample` appears at the end of this example.

The nonlinear constraints are likewise polynomial expressions.

`${x}_{1}-0.2{x}_{2}{x}_{5}\le 71$`

`$0.9{x}_{3}-{x}_{4}^{2}\le 67$`

$3{x}_{2}^{2}{x}_{5}+3{x}_{1}^{2}{x}_{3}=20.875$.

The nonlinear constraints are in the local function `myconstr(x)`, which is nested inside the function `fullexample`.

The problem has bounds on ${x}_{3}$ and ${x}_{5}$.

$0\le {x}_{3}\le 20$, ${x}_{5}\ge 1$.

The problem has a linear equality constraint ${x}_{1}=0.3{x}_{2}$, which you can write as ${x}_{1}-0.3{x}_{2}=0$.

The problem also has three linear inequality constraints:

`$\begin{array}{c}0.1{x}_{5}\le {x}_{4}\\ {x}_{4}\le 0.5{x}_{5}\\ 0.9{x}_{5}\le {x}_{3}.\end{array}$`

Represent the bounds and linear constraints as matrices and vectors. The code that creates these arrays is in the `fullexample` function. As described in the `fmincon` Input Arguments section, the `lb` and `ub` vectors represent the constraints

`lb` $\le x\le$ `ub`.

The matrix `A` and vector `b` represent the linear inequality constraints

`A*x` $\le$ `b`,

and the matrix `Aeq` and vector `beq` represent the linear equality constraints

`Aeq*x = b`.

Call `fullexample` to solve the minimization problem subject to all types of constraints.

`[x,fval,exitflag] = fullexample`
```Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. ```
```x = 5×1 0.6114 2.0380 1.3948 0.1572 1.5498 ```
```fval = 37.3806 ```
```exitflag = 1 ```

The exit flag value of `1` indicates that `fmincon` converges to a local minimum that satisfies all of the constraints.

This code creates the `fullexample` function, which contains the nested functions `myobj` and `myconstr`.

```function [x,fval,exitflag] = fullexample x0 = [1; 4; 5; 2; 5]; lb = [-Inf; -Inf; 0; -Inf; 1]; ub = [ Inf; Inf; 20; Inf; Inf]; Aeq = [1 -0.3 0 0 0]; beq = 0; A = [0 0 0 -1 0.1 0 0 0 1 -0.5 0 0 -1 0 0.9]; b = [0; 0; 0]; opts = optimoptions(@fmincon,'Algorithm','sqp'); [x,fval,exitflag] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub,... @myconstr,opts); %--------------------------------------------------------- function f = myobj(x) f = 6*x(2)*x(5) + 7*x(1)*x(3) + 3*x(2)^2; end %--------------------------------------------------------- function [c, ceq] = myconstr(x) c = [x(1) - 0.2*x(2)*x(5) - 71 0.9*x(3) - x(4)^2 - 67]; ceq = 3*x(2)^2*x(5) + 3*x(1)^2*x(3) - 20.875; end end```