Accelerating the pace of engineering and science

# Documentation

## Nonlinear Inequality Constraints

This example shows how to solve a scalar minimization problem with nonlinear inequality constraints. The problem is to find x that solves

 $\underset{x}{\mathrm{min}}f\left(x\right)={e}^{{x}_{1}}\left(4{x}_{1}^{2}+2{x}_{2}^{2}+4{x}_{1}{x}_{2}+2{x}_{2}+1\right).$ (6-56)

subject to the constraints

x1x2x1x2 ≤ –1.5,
x1x2 ≥ –10.

Because neither of the constraints is linear, you cannot pass the constraints to fmincon at the command line. Instead you can create a second file, confun.m, that returns the value at both constraints at the current x in a vector c. The constrained optimizer, fmincon, is then invoked. Because fmincon expects the constraints to be written in the form c(x) ≤ 0, you must rewrite your constraints in the form

 x1x2 – x1 – x2 + 1.5 ≤ 0,–x1x2 –10 ≤ 0. (6-57)

### Step 1: Write a file objfun.m for the objective function.

```function f = objfun(x)
f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);```

### Step 2: Write a file confun.m for the constraints.

```function [c, ceq] = confun(x)
% Nonlinear inequality constraints
c = [1.5 + x(1)*x(2) - x(1) - x(2);
-x(1)*x(2) - 10];
% Nonlinear equality constraints
ceq = [];```

### Step 3: Invoke constrained optimization routine.

```x0 = [-1,1];     % Make a starting guess at the solution
options = optimoptions(@fmincon,'Algorithm','sqp');
[x,fval] = ...
fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);```

fmincon produces the solution x with function value fval:

```x,fval
x =
-9.5474  1.0474
fval =
0.0236```

You can evaluate the constraints at the solution by entering

`[c,ceq] = confun(x)`

This returns numbers close to zero, such as

```c =

1.0e-14 *

-0.6661
0.7105

ceq =

[]```

Note that both constraint values are, to within a small tolerance, less than or equal to 0; that is, x satisfies c(x) ≤ 0.