根据文档中的数学建模内容,用matlab解决文中所有问题包括任务1,2,3,4,5,给出详细的程序
时间: 2024-11-18 09:18:32 浏览: 22
要使用MATLAB解决文档中的所有问题,我们需要逐步实现各个任务。以下是详细的MATLAB代码和解释:
### 任务1: 预测氯仿浓度
首先,定义一些基本参数和函数。
```matlab
% 定义常量
k2 = 0.45; % 扩散系数 (m^2/s)
k3 = 0.32; % 扩散系数 (m^2/s)
c = 0.5; % 风速 (m/s)
% 工厂1的数据
Q1 = 100; % 排放速率 (g/s)
z1 = 25; % 烟囱高度 (m)
x1 = 4000; % 距离 (m)
y1 = 300; % 距离 (m)
% 工厂2的数据
Q2 = 50; % 排放速率 (g/s)
z2 = 10; % 烟囱高度 (m)
x2 = 1100; % 距离 (m)
y2 = 45; % 距离 (m)
% 时间 t (s)
t = 3600; % 1小时
% 浓度计算函数
function C = concentration(Q, x, y, z, k2, k3, c, t)
k = sqrt(k2 + k3);
C = Q / (4 * pi * k * sqrt(t)) * exp(-(x - c*t)^2 / (4*k2*t) - y^2 / (4*k3*t) - z^2 / (4*k3*t));
end
% 计算工厂1和工厂2的浓度
C1 = concentration(Q1, x1, y1, z1, k2, k3, c, t);
C2 = concentration(Q2, x2, y2, z2, k2, k3, c, t);
% 总浓度
C_total = C1 + C2;
disp(['总浓度: ', num2str(C_total), ' g/m^3']);
```
### 任务2: 大气逆温情况下的浓度
修改风速 `c` 并重新计算浓度。
```matlab
% 修改风速
c = 0.05;
% 重新计算工厂1和工厂2的浓度
C1_inv = concentration(Q1, x1, y1, z1, k2, k3, c, t);
C2_inv = concentration(Q2, x2, y2, z2, k2, k3, c, t);
% 总浓度
C_total_inv = C1_inv + C2_inv;
disp(['逆温情况下总浓度: ', num2str(C_total_inv), ' g/m^3']);
% 比较两种情况
if C_total < C_total_inv
disp('盛行风条件下的空气质量更好');
else
disp('逆温情况下的空气质量更好');
end
```
### 任务3: 减少氯仿浓度的方案
#### 方案1: 加高烟囱
```matlab
% 新烟囱高度
z1_new = z1 + 8;
z2_new = z2 + 8;
% 重新计算工厂1和工厂2的浓度
C1_higher = concentration(Q1, x1, y1, z1_new, k2, k3, c, t);
C2_higher = concentration(Q2, x2, y2, z2_new, k2, k3, c, t);
% 总浓度
C_total_higher = C1_higher + C2_higher;
disp(['加高烟囱后的总浓度: ', num2str(C_total_higher), ' g/m^3']);
```
#### 方案2: 增加污染控制装置
```matlab
% 新排放速率
Q1_new = Q1 - 35;
Q2_new = Q2 - 35;
% 重新计算工厂1和工厂2的浓度
C1_control = concentration(Q1_new, x1, y1, z1, k2, k3, c, t);
C2_control = concentration(Q2_new, x2, y2, z2, k2, k3, c, t);
% 总浓度
C_total_control = C1_control + C2_control;
disp(['增加污染控制装置后的总浓度: ', num2str(C_total_control), ' g/m^3']);
```
#### 方案3: 关闭工厂1
```matlab
% 仅计算工厂2的浓度
C_total_close = C2;
disp(['关闭工厂1后的总浓度: ', num2str(C_total_close), ' g/m^3']);
```
#### 方案4: 搬迁大学
```matlab
% 搬迁大学的成本
cost_move_university = 500e6 - 200e6 + 100e6;
disp(['搬迁大学的成本: $', num2str(cost_move_university)]);
```
### 任务4: 成本计算
#### 方案1: 加高烟囱的成本
```matlab
% 加高烟囱的成本
cost_higher_chimney = 30000 + 8 * 5000;
disp(['加高烟囱的成本: $', num2str(cost_higher_chimney)]);
```
#### 方案2: 增加污染控制装置的成本
```matlab
% 增加污染控制装置的成本
r = 35;
cost_control_device = 10000 + 2000 * r;
disp(['增加污染控制装置的成本: $', num2str(cost_control_device)]);
```
#### 方案3: 关闭工厂1的成本
```matlab
% 关闭工厂1的成本
cost_close_factory = 2000000;
disp(['关闭工厂1的成本: $', num2str(cost_close_factory)]);
```
### 任务5: 最佳分配方案
#### 方案5(a): 单个工厂购置污染控制设备
```matlab
% 每个工厂购置污染控制设备的成本
r = 2;
cost_single_device = 10000 + 2000 * r;
disp(['单个工厂购置污染控制设备的成本: $', num2str(cost_single_device)]);
% 两个工厂购置污染控制设备的成本
total_cost_devices = 2 * cost_single_device;
disp(['两个工厂购置污染控制设备的总成本: $', num2str(total_cost_devices)]);
% 新排放速率
Q1_new_2 = Q1 - 2;
Q2_new_2 = Q2 - 2;
% 重新计算工厂1和工厂2的浓度
C1_new_2 = concentration(Q1_new_2, x1, y1, z1, k2, k3, c, t);
C2_new_2 = concentration(Q2_new_2, x2, y2, z2, k2, k3, c, t);
% 总浓度
C_total_new_2 = C1_new_2 + C2_new_2;
disp(['两个工厂购置污染控制设备后的总浓度: ', num2str(C_total_new_2), ' g/m^3']);
```
#### 方案5(b): 最佳分配方案
```matlab
% 定义目标函数
fun = @(x) concentration(Q1 - x(1), x1, y1, z1, k2, k3, c, t) + ...
concentration(Q2 - x(2), x2, y2, z2, k2, k3, c, t);
% 约束条件
A = [];
b = [];
Aeq = [1, 1];
beq = 2;
lb = [0, 0];
ub = [2, 2];
% 使用fmincon优化
x0 = [1, 1];
[x_opt, fval] = fmincon(fun, x0, A, b, Aeq, beq, lb, ub);
% 输出最优解
disp(['最优分配: 工厂1减少 ', num2str(x_opt(1)), ' g/s, 工厂2减少 ', num2str(x_opt(2)), ' g/s']);
disp(['最优浓度: ', num2str(fval), ' g/m^3']);
```
以上代码涵盖了文档中提到的所有任务,可以通过运行这些代码来获得所需的浓度和成本结果。希望这对你有所帮助!
阅读全文