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