Optimization Toolbox | ![]() ![]() |
Equality Constrained Example
For routines that permit equality constraints, nonlinear equality constraints must be computed in the M-file with the nonlinear inequality constraints. For linear equalities, the coefficients of the equalities are passed in through the matrix Aeq
and the right-hand-side vector beq
.
For example, if you have the nonlinear equality constraint and the nonlinear inequality constraint
, rewrite them as
and then solve the problem using the following steps.
Step 1: Write an M-file objfun.m.
Step 2: Write an M-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 = optimset('LargeScale','off'); [x,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],... @confuneq,options) [c,ceq] = confuneq(x) % Check the constraint values at x
After 21 function evaluations, the solution produced is
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 zero as desired.
![]() | Gradient Check: Analytic Versus Numeric | Maximization | ![]() |