This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Nonlinear Equality and Inequality Constraints

You can 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.

For example, if you have the nonlinear equality constraint x12+x2=1 and the nonlinear inequality constraint x1x2 ≥ –10, rewrite them as


and then solve the problem using the following steps.

For this example, solve the problem


subject to these nonlinear constraints.

Step 1: Write a file objfun.m.

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 confuneq.m for the nonlinear constraints.

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

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,[],[],[],[],[],[],... 

After 21 function evaluations, the solution produced is

x =
   -0.7529    0.4332
fval =

[c,ceq] = confuneq(x) % Check the constraint values at x

c =
ceq =

Note that ceq is equal to 0 within the default tolerance on the constraints of 1.0e-006 and that c is less than or equal to 0, as desired.

Related Topics

Was this topic helpful?