线性规划问题的matlab求解

时间:2023-01-16 15:53:18

函数:[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