Documentation

Lagrange Multiplier Structures

Constrained optimization involves a set of Lagrange multipliers, as described in First-Order Optimality Measure. Solvers return estimated Lagrange multipliers in a structure. The structure is called lambda, since the conventional symbol for Lagrange multipliers is the Greek letter lambda (λ). The structure separates the multipliers into the following types, called fields:

• lower, associated with lower bounds

• upper, associated with upper bounds

• eqlin, associated with linear equalities

• ineqlin, associated with linear inequalities

• eqnonlin, associated with nonlinear equalities

• ineqnonlin, associated with nonlinear inequalities

To access, for example, the nonlinear inequality field of a Lagrange multiplier structure, enter lambda.inqnonlin. To access the third element of the Lagrange multiplier associated with lower bounds, enter lambda.lower(3).

The content of the Lagrange multiplier structure depends on the solver. For example, linear programming has no nonlinearities, so it does not have eqnonlin or ineqnonlin fields. Each applicable solver's function reference pages contains a description of its Lagrange multiplier structure under the heading “Outputs.”

Examine the Lagrange multiplier structure for the solution of a nonlinear problem with linear and nonlinear inequality constraints and bounds.

lb = [-3 -3]; % lower bounds
ub = [3 3]; % upper bounds
A = [1 1]; % linear inequality x(1) + x(2) <= 1
b = 1;
Aeq = [];
beq = [];
x0 = [-1 1];
fun = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2; % Rosenbrock function
nlcons = @(x)deal(x(1)^2 + x(2)^2 - 1,[]); % nonlinear inequality
options = optimoptions('fmincon','Display','off');
[x,fval,exitflag,output,lambda] = ...
fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nlcons,options);

disp(lambda)
eqlin: [0×1 double]
eqnonlin: [0×1 double]
ineqlin: 0.3407
lower: [2×1 double]
upper: [2×1 double]
ineqnonlin: 1.7038e-07

Here is an interpretation of the Lagrange multiplier structure.

• The lambda.eqlin and lambda.eqnonlin fields have size 0 because there are no linear equality constraints and no nonlinear equality constraints.

• The lambda.ineqlin field has value 0.3407, indicating that the linear inequality constraint is active. The linear inequality constraint is x(1) + x(2) <= 1. Check that the constraint is active at the solution, meaning the solution causes the inequality to be an equality:

x(1) + x(2)
ans =

1.0000
• Check the values of the lambda.lower and lambda.upper fields.

lambda.lower
ans =

1.0e-07 *

0.2210
0.2365
lambda.upper
ans =

1.0e-07 *

0.3361
0.3056

These values are effectively zero, indicating that the solution is not near the bounds.

• The value of the lambda.ineqnonlin field is 1.7038e-07, indicating that this constraint is not active. Check the constraint, which is x(1)^2 + x(2)^2 <= 1.

x(1)^2 + x(2)^2
ans =

0.5282

The nonlinear constraint function value is not near its limit, so the Lagrange multiplier is approximately 0.

Watch now