linprog函数主要用来求线型规划中的最小值问题(最大值的镜像问题,求最大值只需要加个“-”)
针对约束条件为Ax=b或Ax≤b的问题
x=linprog(f,A,b)
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
f:目标函数
A:不等式约束条件矩阵
b:对应不等式右侧的矩阵
Aeq:等式约束条件矩阵
beq:不等式右侧的矩阵
Aeq:等式约束条件矩阵
beq:对应等式右侧的矩阵
lb:x的下界
ub:x的上界
x0:设置初始点x0,这个选择项只是对medium-scale算法有效。默认的large-scale算法和简单的算法忽略任何初始点。(一般用不到)
linprog函数常用形式为:
x=linprog(f,A,b,Aep,beq,lb,ub);
求最大值 :f= 7·x1 + 4·x2
约束条件为:
x1 + x2 ≤ 12
3·x1 + 2·x2 ≤ 26
2·x1 + x2 ≤ 16
x1≥0,x2≥0
根据目标函数f= 7·x1 + 4·x2可得:
f=[ 7 4 ];
根据不等式约束条件,有
1、A = [1 1;3 2;2 1];
2、b = [12 26 16];
x只有下届没有上届,有
lb = [0 0];
所以完整代码为
f = [ 7 4 ];
A = [1 1;3 2;2 1];
b = [12 26 16];
lb = [0 0];
[ x , fval ] = linprog( -f , A , b , [] , [] , lb , ub);
disp(x)
disp(-fval)
目标函数求最大值,所以f前加“-”
例题为不等式约束,等式参数Aeq,beq为空,用“[]”代替;x没有上界,ub也用“[]”代替。
“x”即目标函数取最大值时x1、x2的取值,“fval"即最小值。