注:
1、x = linprog(f,A,b) ;求解 min f'*x,满足 A*x ≤ b;
例:
A=[1,2;2,-1/2;-1,-1];
b=[6,3,3];
f=[0,1];
x=linprog(f,A,b)
2、x = linprog(f,A,b,Aeq,beq) ;包括等式约束 Aeq*x = beq。如果不存在不等式,设置 A = [] 和 b = [];
例:
A=[1,1,0;0,1,1;1,1,-1];
b=[1/4,1/2,1/3];
Aeq=[1,1,1];
beq=1;
f=[0,-1,1];
x=linprog(f,A,b,Aeq,beq)
3、x = linprog(f,A,b,Aeq,beq,lb,ub) ;定义变量 x 的一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,设置 Aeq = [] 和 beq = []。
例:
A=[1,1,1;1,4,0;0,3,-1];
b=[2,4,3];
f=[0,-1,1];
lb=[-2,-1,-3];
ub=[5,4,4];
x=linprog(f,A,b,[],[],lb,ub)
4、[x,fval] = linprog(f,A,b);求解问题并返回函数值。
options = optimoptions('linprog','Algorithm','dual-simplex');设置选项以使用 'dual-simplex' 算法。
[x,fval,exitflag,output] = linprog(f,A,b,Aeq,beq,lb,ub,options);求解线性规划并请求返回函数值、退出标志和输出结构体。
注:
(1)exitflag = 1 表示解可靠;
(2)output.iterations = 0 表示 linprog 在预求解过程中即找到解,根本不必进行迭代。
例:
A=[1,1;1,0.25;1,-1;-0.25,-1;-1,-1;-1,1];
b=[2,1,2,1,-1,2];
Aeq=[1 0.25];
beq=0.5;
lb=[-1.5,-1];
ub=[1.75,1.5];
f=[-1.2 -0.4];
options=optimoptions('linprog','Algorithm','dual-simplex');
[x,fval,exitflag,output]=linprog(f,A,b,Aeq,beq,lb,ub,options)
5、拉格朗日乘数
例:
f=[-5;-4;-3];
A=[1,-2,1;3,2,4;3,2,0];
b=[20;42;31];
lb = zeros(3,1); %把三个变量均约束为正值
Aeq=[];
beq=[]; %没有线性等式约束
[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb); %调用linprog,获取拉格朗日乘数
x,lambda.ineqlin,lambda.lower %检查解和拉格朗日乘数
A*x %检查这是否属实