根据文本建立的数学模型,利用matlab解决任务1,2,3,4,5,给出详细的代码并加以解释
时间: 2024-11-18 10:27:36 浏览: 17
为了完成任务1至5,我们需要使用MATLAB编写代码来模拟氯仿浓度的变化。以下是详细的代码及解释:
### 任务1: 预测在盛行风影响下,由这些工厂排出的氯仿在学生活动中心周围空气中的浓度
#### MATLAB代码
```matlab
% 定义参数
Q0_1 = 100; % 工厂1排放速率 (g/s)
z1 = 25; % 工厂1烟囱高度 (m)
x1 = 4000; % 工厂1到学生活动中心的距离(与盛行风向平行) (m)
y1 = 300; % 工厂1到学生活动中心的距离(与盛行风向垂直) (m)
Q0_2 = 50; % 工厂2排放速率 (g/s)
z2 = 10; % 工厂2烟囱高度 (m)
x2 = 1100; % 工厂2到学生活动中心的距离(与盛行风向平行) (m)
y2 = 45; % 工厂2到学生活动中心的距离(与盛行风向垂直) (m)
c = 0.5; % 风速 (m/s)
k2 = 0.45; % 扩散系数 (m^2/s)
k3 = 0.32; % 扩散系数 (m^2/s)
% 定义时间和空间范围
t = 0:1:1000; % 时间范围 (s)
x = -5000:1:5000; % 空间范围(与盛行风向平行) (m)
y = -500:1:500; % 空间范围(与盛行风向垂直) (m)
% 初始化浓度矩阵
C = zeros(length(t), length(x), length(y));
% 计算浓度
for i = 1:length(t)
for j = 1:length(x)
for k = 1:length(y)
% 工厂1的贡献
C(i,j,k) = C(i,j,k) + Q0_1 * exp(-(x(j) - x1 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
% 工厂2的贡献
C(i,j,k) = C(i,j,k) + Q0_2 * exp(-(x(j) - x2 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
end
end
end
% 查找学生活动中心的浓度
x_center = 0;
y_center = 0;
idx_x = find(x == x_center);
idx_y = find(y == y_center);
concentration_at_center = C(:, idx_x, idx_y);
% 绘制浓度随时间变化的图
figure;
plot(t, concentration_at_center);
xlabel('Time (s)');
ylabel('Concentration (g/m^3)');
title('Chloroform Concentration at the Student Activity Center');
grid on;
```
#### 解释
1. **定义参数**:设置工厂的排放速率、烟囱高度、距离等参数。
2. **定义时间和空间范围**:设定时间步长和空间范围。
3. **初始化浓度矩阵**:创建一个三维数组 `C` 来存储各个时间和空间点的浓度。
4. **计算浓度**:使用双层循环遍历时间和空间点,计算每个工厂对每个点的浓度贡献。
5. **查找学生活动中心的浓度**:找到学生活动中心的位置,并提取该位置的浓度。
6. **绘制浓度随时间变化的图**:使用 `plot` 函数绘制浓度随时间的变化曲线。
### 任务2: 假设发生了大气逆温,大量空气在此地区商中滞留了若干天。在这种情况下,风速下降到大约 0.05m/s。计算此时的氯仿浓度。将结果与盛行风条件下的浓度进行比较。在那种情况下空气质量更高?
#### MATLAB代码
```matlab
% 修改风速
c_inv = 0.05;
% 初始化新的浓度矩阵
C_inv = zeros(length(t), length(x), length(y));
% 计算浓度
for i = 1:length(t)
for j = 1:length(x)
for k = 1:length(y)
% 工厂1的贡献
C_inv(i,j,k) = C_inv(i,j,k) + Q0_1 * exp(-(x(j) - x1 - c_inv*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
% 工厂2的贡献
C_inv(i,j,k) = C_inv(i,j,k) + Q0_2 * exp(-(x(j) - x2 - c_inv*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
end
end
end
% 查找学生活动中心的浓度
concentration_at_center_inv = C_inv(:, idx_x, idx_y);
% 绘制浓度随时间变化的图
figure;
plot(t, concentration_at_center, 'b', t, concentration_at_center_inv, 'r');
xlabel('Time (s)');
ylabel('Concentration (g/m^3)');
legend('Prevailing Wind', 'Temperature Inversion');
title('Comparison of Chloroform Concentration at the Student Activity Center');
grid on;
```
#### 解释
1. **修改风速**:将风速设置为 0.05 m/s。
2. **初始化新的浓度矩阵**:创建一个新的三维数组 `C_inv` 来存储逆温条件下的浓度。
3. **计算浓度**:使用相同的逻辑计算逆温条件下的浓度。
4. **查找学生活动中心的浓度**:提取逆温条件下学生活动中心的浓度。
5. **绘制浓度对比图**:在同一张图上绘制两种条件下的浓度变化曲线,并添加图例进行区分。
### 任务3: 提出减少氯仿排放量的建议
#### MATLAB代码
```matlab
% 定义改进措施
z1_new = z1 + 8; % 增高烟囱 8m
Q0_1_new = Q0_1 - 35; % 减少排放 35 g/s
Q0_2_new = Q0_2 - 35; % 减少排放 35 g/s
% 初始化新的浓度矩阵
C_improved = zeros(length(t), length(x), length(y));
% 计算改进后的浓度
for i = 1:length(t)
for j = 1:length(x)
for k = 1:length(y)
% 工厂1的贡献
C_improved(i,j,k) = C_improved(i,j,k) + Q0_1_new * exp(-(x(j) - x1 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
% 工厂2的贡献
C_improved(i,j,k) = C_improved(i,j,k) + Q0_2_new * exp(- x2 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
end
end
end
% 查找学生活动中心的浓度
concentration_at_center_improved = C_improved(:, idx_x, idx_y);
% 绘制浓度随时间变化的图
figure;
plot(t, concentration_at_center, 'b', t, concentration_at_center_improved, 'r');
xlabel('Time (s)');
ylabel('Concentration (g/m^3)');
legend('Original', 'Improved');
title('Chloroform Concentration with Improved Measures');
grid on;
```
#### 解释
1. **定义改进措施**:增高烟囱 8m,减少每个工厂的排放 35 g/s。
2. **初始化新的浓度矩阵**:创建一个新的三维数组 `C_improved` 来存储改进后的浓度。
3. **计算改进后的浓度**:使用改进后的参数重新计算浓度。
4. **查找学生活动中心的浓度**:提取改进后学生活动中心的浓度。
5. **绘制浓度对比图**:在同一张图上绘制原始和改进后的浓度变化曲线,并添加图例进行区分。
### 任务4: 计算每种改进措施的成本
#### MATLAB代码
```matlab
% 定义成本参数
fixed_cost_chimney_extension = 30000; % 固定成本
cost_per_meter_chimney_extension = 5000; % 每米成本
max_chimney_height = 40; % 最大烟囱高度
pollution_control_cost_1 = 10000 + 2000 * 2; % 每个工厂减少 2 g/s 排放量的成本
pollution_control_cost_2 = 10000 + 2000 * 2; % 每个工厂减少 2 g/s 排放量的成本
closure_and_transfer_cost = 2000000; % 关闭和转移生产的成本
relocation_cost = 500000000 - 200000000 + 100000000; % 迁移大学的成本
% 计算每种措施的成本
chimney_extension_cost = fixed_cost_chimney_extension + cost_per_meter_chimney_extension * (max_chimney_height - z1) + cost_per_meter_chimney_extension * (max_chimney_height - z2);
pollution_control_cost_total = pollution_control_cost_1 + pollution_control_cost_2;
closure_and_transfer_cost_total = closure_and_transfer_cost * 2;
% 输出成本
fprintf('Cost of chimney extension: $%.2f\n', chimney_extension_cost);
fprintf('Cost of pollution control equipment: $%.2f\n', pollution_control_cost_total);
fprintf('Cost of closing and transferring production: $%.2f\n', closure_and_transfer_cost_total);
fprintf('Cost of relocating the university: $%.2f\n', relocation_cost);
```
#### 解释
1. **定义成本参数**:设置烟囱延长和污染控制设备的成本参数。
2. **计算每种措施的成本**:分别计算烟囱延长、安装污染控制设备、关闭和转移生产、迁移大学的成本。
3. **输出成本**:打印每种措施的成本。
### 任务5: 购置污染控制设备的最佳分配方案
#### MATLAB代码
```matlab
% 定义预算
budget = 2000000;
% 计算每个工厂的最大减排量
max_reduction_factory_1 = (budget / 2 - 10000) / 2000;
max_reduction_factory_2 = (budget / 2 - 10000) / 2000;
% 计算学生活动中心的浓度变化
C_budget_allocation = zeros(length(t), length(x), length(y));
% 计算浓度
for i = 1:length(t)
for j = 1:length(x)
for k = 1:length(y)
% 工厂1的贡献
C_budget_allocation(i,j,k) = C_budget_allocation(i,j,k) + (Q0_1 - max_reduction_factory_1) * exp(-(x(j) - x1 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
% 工厂2的贡献
C_budget_allocation(i,j,k) = C_budget_allocation(i,j,k) + (Q0_2 - max_reduction_factory_2) * exp(-(x(j) - x2 - c*t(i))^2 / (4*k2*t(i)) - y(k)^2 / (4*k3*t(i))) / (4*pi*k2*t(i)*sqrt(k3*t(i)));
end
end
end
% 查找学生活动中心的浓度
concentration_at_center_budget_allocation = C_budget_allocation(:, idx_x, idx_y);
% 绘制浓度随时间变化的图
figure;
plot(t, concentration_at_center, 'b', t, concentration_at_center_budget_allocation, 'r');
xlabel('Time (s)');
ylabel('Concentration (g/m^3)');
legend('Original', 'Budget Allocation');
title('Chloroform Concentration with Budget Allocation');
grid on;
```
#### 解释
1. **定义预算**:设置总的预算为 2000000 美元。
2. **计算每个工厂的最大减排量**:根据预算分配,计算每个工厂的最大减排量。
3. **计算学生活动中心的浓度变化**:使用新的排放率重新计算浓度。
4. **查找学生活动中心的浓度**:提取新的学生活动中心的浓度。
5. **绘制浓度对比图**:在同一张图上绘制原始和预算分配后的浓度变化曲线,并添加图例进行区分。
通过以上代码,可以完成任务1至5的要求,并生成相应的图表和结果。希望这些代码对你有所帮助!
阅读全文