函数:[x, fval] = linprog(f, A, b, Aeq, Beq, LB, UB)
返回的x:是一个向量——在取得目标函数最小时各个xi的取值;
返回的fval:目标函数的最小值;
参数f:目标函数的系数矩阵;
参数A:不等式约束的系数矩阵;
参数b:不等式约束右端的常数列;
参数Aeq:等式约束的系数矩阵,若没有等式约束,则Aeq = [];
参数Beq:等式约束右端的常数列,若没有等式约束,则Beq = [];
参数LB:x的下界,常遇到的x1, x2, x3 >= 0,0就是下界,可用zeros(3, 1)生成一个3行1列的向量来表示,其中向量的每个元素的值为0;
参数UB:x的上界;
-------------------------------------------------------------------------------------------------------------
求z的最小值及z取得最小值时x的取值:
min z = -5x1 - 4x2 - 6x3
约束条件:
x1 - x2 + x3 <= 20
3x1 + 2x2 + 4x3 <= 42
3x1 + 2x2 <= 30
0 <= x1, 0 <= x2, 0 <= x3
-------------------------------------------------------------------------------------------------------------
编写.m文件:
f = [-5; -4; -6]; A = [1 -1 1; 3 2 4; 3 2 0]; b = [20; 42; 30]; Aeq = []; Beq = []; LB = zeros(3, 1); [x, favl] = linprog(f, A, b, Aeq, Beq, LB)
保存运行,得
x = 0.0000 15.0000 3.0000 favl = -78.0000
-------------------------------------------------------------------------------------------------------------
求z的最大值及z取得最大值时x的取值:
max z = 2x1 + 3x2 - 5x3
约束条件:
x1 + x2 + x3 = 7
2x1 - 5x2 + x3 >= 10
x1, x2, x3 >= 0
-------------------------------------------------------------------------------------------------------------
编写.m文件:
f = [-2; -3; 5]; %转换成求负形式的最小值 A = [-2 5 -1]; %原>=号,两边同乘-1,转成标准形式 b = [-10]; %原>=号,两边同乘-1,转成标准形式 Aeq = [1 1 1]; Beq = [7]; LB = zeros(3, 1); [x, fval] = linprog(f, A, b, Aeq, Beq, LB); x fval = -fval %将负形式的最小值转回原正形式的最大值
保存运行,得
x = 6.4286 0.5714 0.0000 fval = 14.5714