# Nonlinear Equality and Inequality Constraints

This example shows how to solve an optimization problem containing nonlinear constraints. Include nonlinear constraints by writing a function that computes both equality and inequality constraint values. A nonlinear constraint function has the syntax

[c,ceq] = nonlinconstr(x)

The function c(x) represents the constraint c(x) <= 0. The function ceq(x) represents the constraint ceq(x) = 0.

Note: You must have the nonlinear constraint function return both c(x) and ceq(x), even if you have only one type of nonlinear constraint. If a constraint does not exist, have the function return [] for that constraint.

### Nonlinear Constraints

Suppose that your nonlinear equality constraint is

${x}_{1}^{2}+{x}_{2}=1$

and your nonlinear inequality constraint is

${x}_{1}{x}_{2}\ge -10$.

Rewrite these constraints as

$\begin{array}{c}{x}_{1}^{2}+{x}_{2}-1=0\\ -{x}_{1}{x}_{2}-10\le 0.\end{array}$

The confuneq function at the end of this example implements these inequalities in the correct syntax.

### Objective Function

Solve the problem

$\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)$

subject to the constraints. The objfun function at the end of this example implements this objective function.

### Solve Problem

Solve the problem by calling the fmincon solver. This solver requires an initial point; use the point x0 = [-1,-1].

x0 = [-1,-1];

There are no bounds or linear constraints in the problem, so set those inputs to [].

A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];

Call the solver.

[x,fval] = fmincon(@objfun,x0,A,b,Aeq,beq,lb,ub,@confuneq)
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 = 1×2

-0.7529    0.4332

fval = 1.5093

The solver reports that the constraints are satisfied at the solution. Check the nonlinear constraints at the solution.

[c,ceq] = confuneq(x)
c = -9.6739
ceq = 2.0668e-12

c is less than 0, as required. ceq is equal to 0 within the default constraint tolerance of 1e-6.

### Helper Functions

The following code creates the confuneq function.

function [c,ceq] = confuneq(x)
% Nonlinear inequality constraints
c = -x(1)*x(2) - 10;
% Nonlinear equality constraints
ceq = x(1)^2 + x(2) - 1;
end

The following code creates the objfun 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);
end