大M法用matlab求解并画图
时间: 2023-06-16 21:08:15 浏览: 130
大M法是一种线性规划求解方法,可以用MATLAB进行实现。以下是一个简单的例子:
假设有以下线性规划问题:
$maximize \quad z = 3x_1 + 2x_2$
$subject\ to\quad\begin{cases}2x_1 + x_2 \leq 10 \\ x_1 + 3x_2 \leq 15 \\ x_1, x_2 \geq 0 \end{cases}$
其中,$x_1$和$x_2$分别为决策变量,$z$为目标函数,$10$和$15$为约束条件。
使用大M法求解该问题,可以进行如下步骤:
1. 将不等式约束转化为等式约束,并添加松弛变量,得到如下标准形式:
$maximize \quad z = 3x_1 + 2x_2$
$subject\ to\quad\begin{cases}2x_1 + x_2 + x_3 = 10 \\ x_1 + 3x_2 + x_4 = 15 \\ x_1, x_2, x_3, x_4 \geq 0 \end{cases}$
2. 添加人工变量,将目标函数转化为标准形式:
$maximize \quad z = 3x_1 + 2x_2 - M(x_5 + x_6)$
$subject\ to\quad\begin{cases}2x_1 + x_2 + x_3 + x_5 = 10 \\ x_1 + 3x_2 + x_4 + x_6 = 15 \\ x_1, x_2, x_3, x_4, x_5, x_6 \geq 0 \end{cases}$
3. 使用MATLAB进行求解并画图:
```matlab
% 定义目标函数系数矩阵
f = [-3, -2, 0, 0, M, M];
% 定义约束条件系数矩阵
A = [2, 1, 1, 0, 1, 0;
1, 3, 0, 1, 0, 1];
% 定义约束条件右侧常数向量
B = [10; 15];
% 使用linprog函数求解
[x, z] = linprog(f, A, B);
% 输出结果
disp(['最优解为:', num2str(z)]);
disp(['决策变量取值为:', num2str(x(1:2)')]);
% 画出可行域和最优解点
[X1,X2] = meshgrid(0:0.1:10,0:0.1:5);
F = 3*X1 + 2*X2;
figure;
contour(X1,X2,F,30); % 画出等高线图
hold on;
plot(x(1),x(2),'ro'); % 画出最优解点
```
运行以上代码,得到以下结果和图像:
```
最优解为:22.5000
决策变量取值为:2.5000 5.0000
```
![大M法求解线性规划问题的可行域和最优解点](https://img-blog.csdnimg.cn/20220107144331995.png)