www.gusucode.com > optim 案例源码 matlab代码程序 > optim/ReturnAllOutputsExample.m

    %% Return All Outputs  
% Obtain and interpret all |lsqlin| outputs.   

%% 
% Define a problem with linear inequality constraints and bounds. The problem
% is overdetermined because there are four columns in the |C| matrix but
% five rows. This means the problem has four unknowns and five conditions,
% even before including the linear constraints and bounds. 
C = [0.9501    0.7620    0.6153    0.4057
    0.2311    0.4564    0.7919    0.9354
    0.6068    0.0185    0.9218    0.9169
    0.4859    0.8214    0.7382    0.4102
    0.8912    0.4447    0.1762    0.8936];
d = [0.0578
    0.3528
    0.8131
    0.0098
    0.1388];
A = [0.2027    0.2721    0.7467    0.4659
    0.1987    0.1988    0.4450    0.4186
    0.6037    0.0152    0.9318    0.8462];
b = [0.5251
    0.2026
    0.6721];
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);  

%% 
% Set options to use the |'interior-point'| algorithm. 
options = optimoptions('lsqlin','Algorithm','interior-point');  

%% 
% The |'interior-point'| algorithm does not use an initial point, so set
% |x0| to |[]|. 
x0 = [];  

%% 
% Call |lsqlin| with all outputs. 
[x,resnorm,residual,exitflag,output,lambda] = ...
    lsqlin(C,d,A,b,[],[],lb,ub,x0,options) 

%% 
% Examine the nonzero Lagrange multiplier fields in more detail. First
% examine the Lagrange multipliers for the linear inequality constraint.
lambda.ineqlin
%% 
% Lagrange multipliers are nonzero exactly when the solution is on the
% corresponding constraint boundary. In other words, Lagrange multipliers
% are nonzero when the corresponding constraint is active.
% |lambda.ineqlin(2)| is nonzero. This means that the second element in
% |A*x| should equal the second element in |b|, because the constraint is
% active.
[A(2,:)*x,b(2)]
%%
% Now examine the Lagrange multipliers for the lower and upper bound
% constraints.
lambda.lower
%%
lambda.upper  
%%
% The first two elements of |lambda.lower| are nonzero. You see that |x(1)|
% and |x(2)| are at their lower bounds, |-0.1|. All elements of
% |lambda.upper| are essentially zero, and you see that all components of
% |x| are less than their upper bound, |2|.