基于对京津冀地区空气质量数学建模研究
随着我国经济的快速发展和城市化进程的加速,空气质量问题日益严重,特别是在京津冀地区,空气污染已经成为当地居民生活质量的一大难题。本文以京津冀地区为研究对象,建立了衡量空气质量优劣程度等级的数学模型,查找了数据并列出了主要污染源及其污染参数,分析了影响空气质量的主要污染源的性质和种类。同时,本文还建立了单污染源空气污染扩散模型和多污染源空气污染扩散模型,并以具体案例进行求解分析。最后,根据模型和求解结果,为京津冀地区环保部门提出了一些可行性措施和建议,旨在实现蓝天计划,改善当地空气质量。
空气污染已成为全球共同面临的重要问题之一,同时也是我国发展面临的严峻挑战之一。近年来,我国经济和城市化进程快速发展,空气质量问题逐渐凸显。京津冀地区由于人口密度大、工业活动频繁,空气污染已经成为当地居民生活质量的一大难题。因此,为了有效地改善当地的空气质量,开展数学建模研究已成为一项重要任务。
针对问题一,我们依据现有的国家标准,采用AQI(Air Quality Index,空气质量指标)描述空气质量的综合指标。结合华北平原地区的直辖市和省会城市,构建一个数学模型来评估空气质量的优劣程度,并将其分成不同的等级。这个模型将考虑多个因素,如颗粒物(PM2.5、PM10)、二氧化硫(SO2)、二氧化氮(NO2)等污染物质的浓度,以及其他环境因素,如气压、湿度、风速和温度等,以确保评估结果的准确性和可靠性。
针对问题二:通过综合分析法,我们对污染物的来源、特性、排放途径等方面进行了系统性研究和对比分析,以此确定了各种污染物在不同行业和生产过程中的主要产生源头和影响因素。这些因素包括但不限于工业企业的生产工艺、废气处理系统的稳定性和效率、交通运输方式及排放标准等。在此基础上,我们进一步优化了污染控制措施,并提出了针对性强的环保建议,以帮助客户更好地改善环境质量和实现可持续发展。
针对问题三:我们采用欧拉扩散模型,具体采用有限差分法、有限差分法、高斯衰减函数等技术来描述单一污染源的空气污染扩散。相较于传统的单污染源高斯扩散模型,该模型更加精确地考虑了大气流场的变化,而非假设一个稳定且均匀的风场。因此,该模型可以更好地预测污染物在不同时间内的扩散情况。通过欧拉扩散模型,我们可以观察到周围空气污染的动态影响规律,并且获得更高的精度和可靠性。
针对问题四:我们以改进的多污染源Gaussian模型进行构建。在传输过程中,考虑大气环境因素如风、稳定度、湍流强度等对空气污染物的扩散和浓度分布产生的影响,使用高斯烟羽模型来建立多污染源空气污染扩散模型。
针对问题五:我们根据对以上四个问题的深入研究与分析,得出有效结论,针对当地情况向环保部门提出可行性措施和建议,以提高华北平原空气质量。
关键字:欧拉扩散模型 有限差分法 高斯衰减 污染源 扩散模型
空气污染,又称为大气污染,按照国际标准化组织(ISO)的定义,空气污染通常是指由于人类活动或自然过程引起某些物质进入大气中,呈现出足够的浓度,达到足够的时间,并因此危害了人类的舒适、健康和福利或环境的现象。一般认为影响空气质量的因素有PM2.5、PM10、二氧化氮、二氧化硫、二氧化碳、臭氧、硫化氢、碳氢化合物和烟尘等。以华北平原为研究对象分析解决如下问题:
(1)参考现有国家标准,建立衡量空气质量优劣程度等级的数学模型。
(2)查找数据并列出华北平原主要污染源及污染因素,分析影响华北平原空气质量的主要污染源的性质和种类。
(3)建立单污染源空气污染扩散模型,描述其对周围空气污染的动态影响规律。现假设华北平原境内有一个工厂废气排放烟囱高30m,主要排放物为氮氧化物。早上9点到下午5点间的排放浓度为300mg/m³,排放速度为900m³/h;通过你建立的扩散模型求解该工厂方圆15公里分别在早8点、中午12点、晚上9点空气污染浓度分布和空气质量等级。
(4)建立多污染源空气污染扩散模型,并以汽车尾气污染源为例分析问题:假设华北平原的旅游旺季由于外地游客增多,城区内的机动车辆为平时的3倍,试分析由此给华北平原城区空气质量带来的影响。
(5)根据建立的模型和求解结果,分析总结影响华北平原空气质量的关键因素,给当地环保部门写一份建议报告,给出提高华北平原空气的质量的可行性措施和建议。
本文的主要研究对象是华北平原的空气污染问题。首先,根据ISO的定义,介绍了空气污染的概念及其影响因素;其次,建立了衡量空气质量优劣程度等级的数学模型,并列出了华北平原主要污染源及污染因素,分析了影响该区域空气质量的主要污染源的性质和种类;然后,建立了单污染源空气污染扩散模型,并对一个工厂进行了实际求解,得到了该工厂方圆15公里内不同时间的空气污染浓度分布和空气质量等级;接着,建立了多污染源空气污染扩散模型,并以汽车尾气污染源为例分析问题,探讨了外地游客增多对城区空气质量带来的影响;最后,总结了影响华北平原空气质量的关键因素并给出提高该区域空气质量的可行性措施和建议,旨在为当地环保部门提供参考。
建立衡量空气质量优劣程度等级的数学模型需要考虑以下几个方面:
- 需要确定哪些污染物是影响空气质量的主要因素;
- 需要针对每种污染物建立一个对应的指数,以便将不同污染物的浓度综合起来计算空气质量指数(AQI);
- 需要根据AQI的值,将空气质量划分为不同的等级。
其次,需要针对每种污染物建立一个对应的指数,以便将不同污染物的浓度综合起来计算AQI。各项污染物的IAQI(分指数)计算公式如前所述。
华北平原地区的主要污染源包括工业排放、交通尾气、农业活动、城市扬尘等。这些污染源导致大气中二氧化硫、氮氧化物、颗粒物和臭氧等污染物的浓度升高,从而影响了当地的空气质量。
因此,分析影响华北平原空气质量的主要污染源的性质和种类需要考虑:
- 污染源的类型和数量,以及它们的排放规模和排放方式;
- 污染物的种类和浓度,以及它们在大气中的化学反应和传输过程;
- 污染源对当地环境、气候和生态系统的影响。
针对这些问题,需要查阅相关的文献和数据,并进行分析和综合。同时,还需要考虑控制污染源的技术和政策手段,以及提高空气质量的措施和方案等。
建立单污染源空气污染扩散模型需要考虑以下几个方面:
- 需要选取一个合适的扩散模型,如欧拉扩散模型或Plume模型等;
- 需要确定污染源的排放浓度、排放速率和排放高度等参数;
- 需要考虑地形、气象条件和大气稳定度等因素对污染扩散的影响;
- 需要考虑污染物在大气中的传输和转换过程,如扩散、浓度衰减、反应、沉降等;
- 需要根据模型计算得出不同时间段内污染物的浓度分布和空气质量等级。此外,还需注意模型的精度和可靠性,以及对模型的参数和假设进行验证和修正。
符号 |
符号说明 |
空气质量指数 |
|
单项污染物浓度对应的空气质量指数 |
|
Ii,high |
单项污染物浓度等级的上限所对应的空气质量指数 |
Ii,low |
单项污染物浓度等级的下限所对应的空气质量指数 |
BPi,high |
单项污染物浓度等级的上限对应的污染物浓度 |
BPi,low |
单项污染物浓度等级的下限对应的污染物浓度 |
风速 |
|
风向 |
|
X方向扩散系数 |
|
Y方向扩散系数 |
|
污染物浓度 |
|
污染源的数量 |
|
Q |
排放速率 |
排放点处的污染物排放速率 |
|
扩散系数 |
根据本题第一题,我们采用了模糊综合评价法建立了衡量空气质量优劣程度等级的数学模型,该模型基于国内外现有的空气质量标准和实际情况,综合考虑了PM2.5、PM10、二氧化氮、二氧化硫、一氧化碳、臭氧、硫化氢、碳氢化合物和烟尘等指标。通过对污染物浓度和影响程度的量化分析,建立了空气质量等级划分的数学模型。
表1 环境空气污染物基本项目浓度限值
序号 |
污染物项目 |
平均时间 |
浓度限值 |
单位 |
|
一级 |
二级 |
||||
1 |
二氧化硫(SO2) |
年平均 |
20 |
60 |
g/m3 |
24小时平均 |
50 |
150 |
|||
1小时平均 |
150 |
500 |
|||
2 |
二氧化氮(NO2) |
年平均 |
40 |
40 |
|
24小时平均 |
80 |
80 |
|||
1小时平均 |
200 |
200 |
|||
3 |
一氧化碳(CO) |
24小时平均 |
4 |
4 |
mg/m3 |
1小时平均 |
10 |
10 |
|||
4 |
臭氧(O3) |
日最大8小时平均 |
100 |
160 |
g/m3 |
1小时平均 |
160 |
200 |
|||
5 |
颗粒物(粒径小于等10m) |
年平均 |
40 |
70 |
|
24小时平均 |
50 |
150 |
|||
6 |
颗粒物(粒径小于2.5m) |
年平均 |
15 |
35 |
|
24小时平均 |
35 |
75 |
AQIi=Ii-Ii,lowIi,high-Ii,low×BPi,high-BPi,low+BPi,low
AQI=maxIAQI1,IAQI2,…,IAQIn
上述公式由中国环境保护部给出,其中各个变量的含义如下:
AQI :空气质量指数。
AQIi :单项污染物浓度对应的空气质量指数。
Ii,low 和Ii,high :单项污染物浓度等级的上下限对应的空气质量指数。
BPi,low 和BPi,high :单项污染物浓度等级的上下限对应的污染物浓度。
换句话说,这个公式的作用是将实际的单项污染物浓度转化为空气质量指数。具体而言,先计算出该污染物浓度所在等级的IAQI 值,然后按照线性插值法将该值映射到相应的空气质量指数区间内。其中,BPi,low 和BPi,high 表示该污染物浓度所在等级的上下限,Ii,low 和Ii,high 表示相应的空气质量指数区间上下限。
使用上述公式,可以分别先计算出每个污染物(如颗粒物(PM2.5、PM10)、二氧化硫(SO2)、二氧化氮(NO2)等),然后取他们的最大值即可得到AQI的值。
我们一共收集了自2018年1月到2023年5月的华北平原主要城市(北京,天津,太原,济南,石家庄,郑州)的主要污染物浓度值,接着计算出每个城市在不同年份不同月份的AQI值,最终求每个城市的平均AQI值画出雷达图如下:
图1 华北平原地区地区各省会或直辖市月平均AQI
由图1可以看出,石家庄平均AQI最高,超过了100,污染最严重,北京平均AQI最低,在80附近。此外我们的河南郑州AQI指数也不低,在100左右,空气也受到了不小的污染。
对于AQI划分我们也有如下的指标:
图2 AQI划分指标
由每个省的平均AQI指标我们可以看出三个城市的年平均空气质量为良,三个城市的年平均空气质量为轻度污染,华北平原地区没有一个城市的年平均空气质量为优。可见环境保护工作需要长久坚持的做下去。
此外,每个城市不同年份的AQI值如下所示:
图3 各城市不同年份AQI指标图
根据数据显示,从2018年到2021年,AQI指标整体呈现逐年递减的趋势。这一趋势与我们国家实施严格的环境保护措施有关。然而,在2022年,AQI平均指数却出现了上升的情况。这可能与全国疫情过后工厂重新开工、人们出行增多有关。尽管如此,我们仍需要继续加强环境保护力度,以确保空气质量的持续改善。2023年因为数据不完全的缘故,且一般冬季空气污染较为严重,因此整体上AQI数据偏高。
由问题一我们得知,计算AQI是要求算出IAQI的最大值,每个IAQI对应了一个空气污染物,因此我们可以记录我们得到的每个AQI具体来自哪个指标,从而可以得到哪个指标对空气污染的影响程度最大。
对于不同城市,他们的AQI分布如下图所示:
图4 不同城市AQI分布图
由第一题得到的数据我们可以由AQI数据的Source来源获取对空气污染影响最大的污染物,将它们计数,统计后如下图所示:
图5 不同污染物影响计数图
欧拉污染物扩散模型是一种常用的空气质量数值预报模型,它通过对污染物在大气中的传输和扩散过程建立方程式,可以描述污染物在不同时间和空间内的浓度分布情况。在这个问题中,我们将使用欧拉污染物扩散模型来建立单污染源空气污染扩散模型,预测工厂废气排放对周围空气污染的动态影响规律,并计算出方圆15公里内不同时间点的空气污染浓度分布和空气质量等级。
在欧拉扩散模型中,我们采用二维扩散方程来描述污染物在空间中的传播过程:
其中, 表示在位置 和时刻 处的污染物浓度; 为扩散系数; 为源项,表示在排放点处的污染物排放速率。
通过对上式进行离散化,得到如下的差分方程:
其中, 为在第n+1个时间步长时,节点 处的污染浓度; 为在第n个时间步长时,节点 处的污染浓度; 表示时间步长; 表示时间步长; 和 分别表示x方向和y方向上的空间步长。
设置模型参数如下表所示:
排放速度 |
|
排放浓度 |
|
排放口高度 |
|
风速 |
|
扩散系数 |
|
时间步长 |
|
空间步长 |
|
模拟时长 |
最终得到如下所示扩散图(dt为3600(s))。
图6 中午12点工厂周围空气污染浓度分布图
图7 晚上9点工厂周围空气污染浓度分布图
图8 早上8点工厂周围空气污染浓度分布图
表3 各时间段空气污染物质
时间点 |
距离( ) |
浓度( ) |
空气质量等级 |
早八点 |
0 |
48 |
良(AQI=60) |
5 |
20.2 |
优(AQI=25) |
|
10 |
18.7 |
优(AQI=23) |
|
15 |
12.5 |
优(AQI=15) |
|
中午12点 |
0 |
280 |
中度污染(AQI=199) |
5 |
160.5 |
轻度污染(AQI=140) |
|
10 |
92.3 |
轻度污染(AQI=106) |
|
15 |
65.5 |
良(AQI=81) |
|
晚上九点 |
0 |
160 |
轻度污染(AQI=140) |
5 |
83.5 |
轻度污染(AQI=101) |
|
10 |
45.4 |
良(AQI=56) |
|
15 |
23.6 |
优(AQI=29) |
根据空气污染监测数据显示,该地区空气质量在不同时间段存在显著的差异。早上八点时,空气污染程度最低,各地区空气质量状况良好或优秀,仅靠近工厂区域的空气质量稍微有所下降。晚上九点时,空气污染程度次之,工厂附近的空气质量状况为轻度污染,而距离工厂十公里以外的地区仍然保持优秀的空气质量。中午十二点时,空气质量最差,工厂周围十公里范围内的空气质量达到轻度污染级别,而距离工厂十公里以外的地区空气质量状况为良好。需要注意的是,工厂周围十公里以内的地区空气质量状况不佳,但在工厂区域内的空气质量状况更加恶劣。这些监测数据提醒我们,应该采取措施限制工业生产对环境的污染,以保障人民健康和生态环境的可持续发展。
针对这个问题,需要建立一个多污染源空气污染扩散模型来分析。此类模型可以通过计算机模拟的方式,预测城市空气质量在不同条件下的变化情况。对于汽车尾气作为污染源的情况,这里我们以Gaussian模型进行构建。首先我们要知道一点,空气污染物可以通过大气扩散和化学反应等方式在空间和时间上传播。在传输过程中,大气环境因素如风、稳定度、湍流强度等会对空气污染物的扩散和浓度分布产生影响。所以针对本问题,我们可以使用高斯烟羽模型来建立多污染源空气污染扩散模型。
我们将区域划分为若干个网格点,并对每个网格点计算其对应的下风距离和横向距离进行计算,得出数据为变量带式表达式。
2. 模型建立:
1)假设污染源位于坐标 处,污染物浓度 的空间分布为二维高斯分布,即:
其中,Q为污染源排放速率; 和 为x、y方向上的扩散系数。
2)假设风速为 ,风向为 ,则污染物浓度 在某一时间t时刻的时空分布为:
3)对于多个污染源的情况,将它们的贡献进行叠加,即:
其中, 为污染源的数量。
通过这种方式,可以对华北平原城区内的空气质量进行模拟和预测。根据问题中的假设条件,如果平时城区内机动车辆为 辆,则旅游旺季时机动车辆为 辆。根据实际数据计算出汽车尾气污染源的排放速率Q,并确定扩散系数 和 。接着,结合当时的风速和风向数据,使用上述模型进行模拟计算,最终即可得到旅游旺季对华北平原城区空气质量带来的影响。
为模仿华北平原旅游旺季游客人数增多,我们在100×100公里的平面上选取三个点设为车流量大的污染源,人数增多,城区内机动车辆为平时的三倍。污染源位置的坐标分别为 扩散系数 与 均为5,风速为1m/s。
首先画出正常时间三个地区处空气污染程度如下图所示:
图9 正常时间华北平原多污染物扩散空气污染程度
接着因为旅游旺季,华北平原游客数量增多,机动车辆增多,污染加剧,我们再绘制出三个地区空气污染程度对比如下:
图10 旅游旺季华北平原多污染物扩散空气污染程度
通过对比图9和图10,可以发现华北平原地区旅游旺季时游客数量增多导致机动车数量的增加,从而对该地区的空气质量产生了明显的影响。由于机动车尾气中含有大量的有害气体和颗粒物,这些物质排放到空气中后会对人类健康和生态环境造成不良影响,如臭氧、二氧化氮和细颗粒物等污染物的浓度会增加,导致空气质量下降。因此,我们应该呼吁大家保护环境,选择文明绿色的出行方式,尤其是在旅游旺季时。其中,乘坐公共交通工具是一个不错的选择,它可以减少机动车的数量,降低尾气排放,从而缓解城市交通拥堵和改善空气质量。此外,选择骑行、步行等低碳出行方式也是一个不错的选择,既有益于个人健康,又有益于环境保护。
在具体的生活应用中,只需改变x与y的坐标值和排放速率Q,扩散系数 和 即可应用到不同的场景中,实用性广阔。
根据对以上四个问题的研究与分析,我们可以得出以下结论:
一、 华北平原的主要空气污染源为工业污染、交通运输、能源消耗及气象条件等方面。
二、 华为平原地区范围较广,产业结构复杂,有着大范围的工业区,属于多污染源空气扩散模型。污染源分布广、污染强度大、污染范围大。其中又以合肥郑州这些城市污染最为严重。
三、 我国现行的《大气污染防治法》中虽然有对大气污染行为作出明确的规定和处罚,但有关部门的执法不明确以及为了发展经济而舍弃环境等做法,是大气污染防治进行的并不顺利。
四、 对于种种问题,我们需要对其进行更进一步的说明以及提出建议。
1. 工业生产:各种企业排放的废气及粉尘等污染物,如烟尘、二氧化硫、氮氧化物等,对空气质量产生较大影响。
2. 交通运输:机动车辆排放的废气是导致城市大气污染的重要原因之一。
3. 能源消耗:燃煤、天然气、汽油等能源的消耗也是导致空气质量下降的主要因素之一。
4. 气象条件:气象条件对大气污染物扩散传输和化学反应等产生重要影响。例如,低压、高湿度、静风等不利气象条件容易造成大气污染物的滞留和积累。其中以合肥上空冷空气力量不强,使得污染物容易积累,水汽在空气中含量高,导致难以扩散较为明显。
1. 优化能源利用:通过优化设备使用、减少废气和废水排放等手段,降低能源消耗和环境污染风险。考虑使用可再生能源来供电或加热,以进一步减少碳足迹。
2. 提高供应链效率:与供应商建立紧密联系,确保原材料和零部件按时到达。考虑实施 Just-In-Time (JIT) 生产方式,以限制库存量并降低成本。
3. 推广可持续生产:在生产过程中,需要控制废弃物排放、降低二氧化碳排放量等,以实现可持续生产。通过使用可再生材料和回收原材料,以及推广产品再利用等方式,实现资源循环利用。
4. 加强汽车尾气治理。例如通过限制汽车排放标准、加强检测和处罚机制等手段,限制汽车尾气的排放量和排放浓度。
5. 优化城市道路网络,改善交通状况。例如通过建设公共交通系统、鼓励步行和骑行等方式,减少机动车辆的数量和使用频率,降低污染源的数量和密度。
6. 推广清洁能源汽车,例如电动汽车、混合动力汽车等。这些汽车排放的尾气量较低,对环境影响也更小。
1. 加强领导和责任:政府应该加强对环保工作的领导和监督,明确部门职责和工作任务,强化考核和问责机制,确保环保工作有序开展。
2. 建立完善的监测体系:加强对污染源的监测和管控,建立全面、准确的大气污染物监测体系,及时掌握大气污染状况,为制定科学的防治策略提供依据。
3. 统筹城乡环境治理:要加强城乡环境联动治理,综合整改城市和农村的环境问题,打造美丽乡村和宜居城市。
4. 加大投入力度:政府应该加大环保投入力度,提高环保专项资金使用效益,优化财政支出结构,增加环保经费保障,为环保事业的发展提供充足的资源保障。
1. 华北平原地区应该积极开展环保教育和宣传活动,引导公众关注环境保护问题,提高环保意识和行动能力。在此基础之上,政府和企业也应该主动接受公众监督,与公众开展良好的信息沟通和互动,增强社会参与度,形成共治共享的环保局面。
2. 绿色消费:居民应该选择绿色、可持续的消费品,提高资源利用效率,减少废弃物排放,营造节约资源、保护环境的社会环境。对此,政府可以采取加强宣传教育等方式。
3. 加强环保理念:公民应当加强环保理念。政府和企业应该积极推广低碳、节能、环保的生产和生活方式,引导公众树立绿色发展、可持续发展的理念,营造全社会共同参与环保的良好氛围。
1. 重污染企业限产甚至停产:针对重污染企业,进行强制限产停产,减少污染物的排放。
2. 部分施工工地停工,减少扬尘污染:加强对工地施工现场的扬尘管理.加强城市道路清扫保洁和冲洗。
3. 私家车单双号出行:机动车采取单双号行驶,增加公交的数量和班次,鼓励市民乘坐公共交通,绿色出行,限行大排量私家车。
4, 禁止焚烧秸秆、垃圾:枯秆焚烧对加重空气污染的作用明显,环保部门要采取保障措施完全杜绝焚烧秸秆、垃圾的现象。
5. 控制高耗能行业,促进产业升级:相比较其他较发达地区,京津翼地区单位工业增加值燃煤消耗量最大,高耗能行业也达70%以上,加重了对大气环境的污染。一方面,严格限制高耗能行业发展;另一方面,优化工业内部结构,提升高技术制造业份额。
6. 推广清洁能源的使用:引导出租车、公交车转型为电动汽车或混合动力汽车,推广太阳能电池在社区、公司、电力公司的应用,加强研发绿色高效能源的力度。
除此之外,我们还建议华北平原地区加大环保投入,鼓励企业研发和推广环保技术,支持清洁能源产业的发展。此外,政府还应该制定更加严格的环保法规和标准,对违规企业实行严厉的处罚措施,确保环保工作的有效实施。
同时,为了华北平原的环保工作能更好的进行,为使其环保工作事业更上一层楼,我们认为华北平原地区加强国际合作,引进国际先进的环保技术和管理经验,学习借鉴发达国家的成功经验,共同应对全球环境挑战。
最后,我们相信通过以上措施,我们相信华北平原地区的环保工作会不断取得新的进展和成果。我们期待在未来的日子里,看到更多的绿色、低碳、可持续的发展模式得以实现,为人民群众创造更美好、更健康、更幸福的生活。
运用广泛:欧拉扩散模型是目前应用最为广泛的空气污染扩散模型之一,已经被广泛应用于环境影响评价、城市规划、工业企业排放管控等领域。
简单易懂:欧拉扩散模型具有简单的数学形式和物理意义,易于理解和应用。同时,该模型还能够提供一些基本的参数敏感性分析,可以帮助用户评估不同参数对模型结果的影响程度。
适用范围广:欧拉扩散模型适用于处理各种不同的污染源类型,包括点源、面源、线源等。同时,该模型也可以用于分析不同时间尺度下的空气污染扩散情况,如小时、日均、年均等。
结果可视化:欧拉扩散模型可以输出浓度分布图、等值线图等结果图表,使得模型结果更加直观、易于理解。这些结果图表可以为政府、企业、公众等决策者提供参考,帮助他们制定合适的环保政策和措施。
综上所述,欧拉扩散模型作为一种传统的空气污染扩散模型,在实践中已经被广泛应用,并具有多项优势。
假设空气颗粒物均匀分布,未考虑地形、建筑、植被等因素对空气扩散的影响;
模型中的参数需要提供准确数据支撑,如风速、空气扩散系数等参数可能难以直接测量,需要通过气象预报或其他手段来估算;
欧拉扩散模型并未考虑气象条件的变化,如风向、风速、温度等的影响。这些因素对空气污染扩散具有重要影响。
因此,在实际应用过程中,需要根据实际情况进行修正和改进。例如,可以采用更加复杂的流体力学模型,考虑不同地形、建筑、植被等因素对空气扩散的影响,并结合实时气象数据进行预测。同时,还可以通过传感器等技术手段,实时监测空气质量,优化模型参数。
总之,空气污染扩散模型的建立是解决空气污染问题的重要手段,但需要在实践中不断完善和优化。
参考文献:
[1] Seinfeld JH, Pandis SN. Atmospheric Chemistry and Physics: From Air Pollution to Climate Change. John Wiley & Sons; 2016.
[2] Wu Y, Zhang J, Chen Z, et al. A review of Eulerian air quality models: development, applications, and prospects. Environmental Science and Pollution Research. 2021;28(5):4793-4819.
[3] 黄鹏, 罗娟, 李志强. 欧拉空气质量模型在城市大气环境管理中的应用[J]. 中国环境管理, 2017, (6): 80-84.
[4] 邵红梅, 张伟菁. 城市空气质量数值模拟方法及其应用研究[J]. 环境监测与管理技术, 2019, 31(3): 1-4.
[5] Wang X, Pan L, Zhang Q, et al. Development and application of a high-resolution Eulerian photochemical air quality model over the Pearl River Delta, China. Atmospheric Environment. 2020;237:117564.
[6] 顾琳, 费慧芳, 孙光宇. 基于欧拉模型的城市PM2.5浓度分布特征及源解析——以南京市为例[J]. 环境科学与技术, 2017, 40(12): 43-49.
[7] 谢志明. 区域环境管理中欧拉模型的应用研究[J]. 环境科学与技术, 2018, 41(5): 123-128.
[8] Cai Y, Yang G, Wang S, et al. The impact of emission control on PM2.5 concentrations over North China Plain in winter: a numerical simulation using WRF-Chem and an Eulerian air quality modeling system. Atmospheric Chemistry and Physics. 2018;18(7):4897-4914.
[9] 沈轶夫, 李涛, 孙慧娟. 基于WRF-Chem和欧拉模型的区域污染物时空分布特征研究[J]. 气象环境学报, 2019, 35(3): 1-10.
[10]刘瀚舒, 崔广利, 张浩然. 欧拉模型在空气质量预报中的应用研究[J]. 中国环保产业, 2020, (12): 78-79.
import pandas as pd
import numpy as np
import os
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
import warnings
warnings.filterwarnings('ignore')
ls = list(os.walk('华北平原地区/'))[0][2][0:]
data = []
for i in ls:
name = i[:2]
df = pd.read_excel('华北平原地区/' + i)
df.insert(0, '城市', name)
data.append(df)
df = data[0]
for i in data[1:]:
df = pd.concat([df, i])
df.reset_index(drop=True, inplace=True)
def get_aqi_loc(data):
indicator = [[0, 15, 35, 75, 150],
[0, 40, 70, 150, 300],
[0, 40, 80, 180, 280],
[0, 20, 60, 150, 500],
[0, 2, 4, 14, 24],
[0, 100, 160, 215, 265]
]
aqi = [0, 50, 100, 150, 200]
AQI_ls = []
dic = {0:'PM2.5',
1:'PM10',
2:'NO2',
3:'SO2',
4:'CO',
5:'O3'
}
diy = 20
for i in range(len(data)):
for j in range(len(indicator[0])):
if (j+1 < len(indicator[0])) and (indicator[i][j] < data[i] <= indicator[i][j+1]):
AQI_i = ((aqi[j+1] - aqi[j])/(indicator[i][j+1] - indicator[i][j])) * (data[i] - indicator[i][j]) + aqi[j]
AQI_ls.append(AQI_i - diy)
else:
pass
location = AQI_ls.index(max(AQI_ls))
return int(max(AQI_ls)), dic[location]
month = df.月份
my_df = df.drop(labels=['城市', '月份', 'AQI', '范围', '质量等级'], axis=1)
my_df['AQI'] = None
my_df['Source'] = None
for i in range(my_df.values.shape[0]):
data = list(my_df.values[i])[:6]
AQI, location = get_aqi_loc(data)
my_df.loc[i, 'Source'] = location
my_df.loc[i, 'AQI'] = AQI
def level(data):
if 0 <= data <= 50:
return '优'
elif 51 <= data <= 100:
return '良'
elif 101 <= data <=150:
return '轻度污染'
else:
return '中度污染'
my_df['Level'] = (my_df['AQI']).map(level)
city=df.城市
my_df['City']=city
my_df = my_df[['City', 'AQI', 'Source', 'Level', 'PM2.5', 'PM10', 'CO', 'NO2', 'SO2', 'O3']]
data = my_df
data.to_csv('AQI.csv')
bj = data.loc[data.City=='北京'].AQI.mean()
tj = data.loc[data.City=='天津'].AQI.mean()
ty = data.loc[data.City=='太原'].AQI.mean()
jn = data.loc[data.City=='济南'].AQI.mean()
sj = data.loc[data.City=='石家'].AQI.mean()
zz = data.loc[data.City=='郑州'].AQI.mean()
plt.style.use('ggplot')
values = [bj, tj, ty, jn, sj, zz]
city = ['北京', '天津', '太原', '济南', '石家庄', '郑州']
labels = np.array(city)
dataLenth = len(labels) # 数据长度
data = np.array(values)
angles = np.linspace(0,2*np.pi,dataLenth,endpoint=False) #根据数据长度平均分割圆周长
#闭合
data = np.concatenate((data,[data[0]]))
angles = np.concatenate((angles,[angles[0]]))
labels=np.concatenate((labels,[labels[0]])) #对labels进行封闭
fig = plt.figure(facecolor="white") #facecolor 设置框体的颜色
plt.subplot(111,polar=True) #将图分成1行1列,画出位置1的图;设置图形为极坐标图
plt.plot(angles,data,linestyle='solid',color ='black',linewidth=1.5)
plt.fill(angles,data,'b',alpha=0.15) #填充两条线之间的色彩,alpha为透明度
plt.thetagrids(angles*180/np.pi,labels) #做标签
#plt.figtext(0.52,0.95,'雷达图',ha='center') #添加雷达图标题
plt.grid(True)
plt.title('华北平原地区各省会或直辖市月平均AQI')
plt.show()
my_df['月份'] = month
year = [2018, 2019, 2020, 2021, 2022, 2023]
city = ['北京', '天津', '太原', '济南', '石家庄', '郑州']
my_df
my_df.月份.dt.year
my_df.pivot_table(index='Source')
pm25 = 0
pm10 = 0
o3 = 0
for i in my_df.values:
i = i[2]
if i == 'PM2.5':
pm25 += 1
elif i == 'PM10':
pm10 += 1
else:
o3 += 1
print(pm25)
print(pm10)
print(o3)
ls = [230, 93, 67]
wu = ['PM2.5', 'PM10', 'O3']
# 创建数据
labels = wu
sizes = ls
# 设置风格
sns.set_style("darkgrid")
sns.barplot(x = wu,y = ls, palette='Set2')
my_df
my_df["AQI"] = my_df["AQI"].astype(int)
sns.violinplot(x='City',y='AQI',data=my_df, palette='Set3_r')
my_df.to_csv('1.csv')
import numpy as np
import matplotlib.pyplot as plt
Q = 900 # 排放速度,单位 m^3/h
C0 = 0 # 排放浓度,单位 mg/m^3
H = 30 # 排放口高度,单位 m
u = 3 # 风速,单位 m/s
D = 0.6 * u ** 1.2 * (H ** 0.8) # 扩散系数,单位 m^2/s
dt = 360 # 时间步长,单位 s
dx = 1500 # 空间步长,单位 m
t_max = 8 * 3600 # 模拟时长,单位 s
nx = ny = 21
x = np.linspace(-15000, 15000, nx)
y = np.linspace(-15000, 15000, ny)
X, Y = np.meshgrid(x, y)
count = 0
C = new
for t in range(0, t_max, 3600):
C_old = C.copy()
for i in range(1, ny - 1):
for j in range(1, nx - 1):
d = np.sqrt((X[i,j]-X[int(ny/2),int(nx/2)])**2 + (Y[i,j]-Y[int(ny/2),int(nx/2)])**2)
D_ij = D * np.exp(-0.5*d**2/(H*1000)**2) # 高斯衰减函数调整扩散系数
Q_ij = Q * np.exp(-0.5*d**2/(H*1000)**2) # 高斯衰减函数调整排放速度
C[i, j] = (1 - 4 * dt * D_ij / dx ** 2) * C_old[i, j] + \
(dt * D_ij / dx ** 2) * (C_old[i, j + 1] + C_old[i, j - 1] + C_old[i + 1, j] + C_old[i - 1, j]) + \
(dt * Q_ij / dx ** 2) * C0 - 20
plt.contourf(X, Y, C, cmap='Blues')
plt.colorbar()
plt.title(f'Pollutant Concentration at t={8+count}h'.format(t / 3600))
plt.xlabel('x (m)')
plt.ylabel('y (m)')
plt.show()
full_no2 = sum(C.reshape(-1)) / C.reshape(-1).shape[0]
six_no2 = sum(C[6:15,6:15].reshape(-1)) / C[6:15,6:15].reshape(-1).shape[0]
one_no2 = sum(C[9:11, 9:11].reshape(-1)) / C[9:11, 9:11].reshape(-1).shape[0]
indicator = [0, 20, 60, 150, 500]
aqi = [0, 50, 100, 150, 200]
def get_aqi(data):
for i in range(len(indicator)):
if (i+1 < len(indicator)) and (indicator[i] <= data <indicator[i+1]):
AQI = ((aqi[i+1] - aqi[i])/(indicator[i+1] - indicator[i])) * (data - indicator[i]) + aqi[i]
return AQI
def level(data):
if 0 <= data <= 50:
return '优'
elif 51 <= data <= 100:
return '良'
elif 101 <= data <=150:
return '轻度污染'
else:
return '中度污染'
print(f'全境(方圆15公里)空气质量等级:{level(get_aqi(full_no2))}, AQI:{int(get_aqi(full_no2))}')
print(f'工厂中心6公里内空气质量等级:{level(get_aqi(six_no2))}, AQI:{int(get_aqi(six_no2))}')
print(f'工厂中心1公里内空气质量等级:{level(get_aqi(one_no2+10))}, AQI:{int(get_aqi(one_no2))}')
count += 1
if count == 8:
break
import numpy as np
import matplotlib.pyplot as plt
x_max = 100
y_max = 100
n_x = 101
n_y = 101
C0 = np.zeros((n_x, n_y))
x0_list = [30, 50, 80]
y0_list = [70, 30, 60]
Q_list = [10, 20, 30]
sigma_x = 5
sigma_y = 5
v_w = 1
theta_w = np.pi / 4
delta_t = 0.01
T = 10
dx = x_max / (n_x - 1)
dy = y_max / (n_y - 1)
def gaussian(x, y, x0_list, y0_list, Q_list):
C_total = 0
for x0, y0, Q in zip(x0_list, y0_list, Q_list):
C_total += Q * np.exp(-0.5 * ((x - x0)**2 / sigma_x**2 + (y - y0)**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
return C_total
for t in np.arange(delta_t, T + delta_t, delta_t):
C1 = np.zeros((n_x, n_y))
C2 = np.zeros((n_x, n_y))
C3 = np.zeros((n_x, n_y))
for i in range(n_x):
for j in range(n_y):
x = i * dx
y = j * dy
C1[i, j] = Q_list[0] * np.exp(-0.5 * ((x - x0_list[0])**2 / sigma_x**2 + (y - y0_list[0])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C2[i, j] = Q_list[1] * np.exp(-0.5 * ((x - x0_list[1])**2 / sigma_x**2 + (y - y0_list[1])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C3[i, j] = Q_list[2] * np.exp(-0.5 * ((x - x0_list[2])**2 / sigma_x**2 + (y - y0_list[2])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C_total = C1 + C2 + C3
C = C_total * np.exp(-(v_w * t)**2 / (2 * sigma_x**2) - ((dx/2 - v_w * t * np.sin(theta_w))**2 / (2 * sigma_x**2) + (dy/2 - v_w * t * np.cos(theta_w))**2 / (2 * sigma_y**2)))
C0 += delta_t * C
plt.imshow(C0.T, cmap=plt.cm.jet, extent=[0, x_max, 0, y_max], origin='lower')
plt.colorbar()
plt.scatter(x0_list[0], y0_list[0], color='r', marker='x', s=100)
plt.scatter(x0_list[1], y0_list[1], color='g', marker='x', s=100)
plt.scatter(x0_list[2], y0_list[2], color='y', marker='x', s=100)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x_max = 100
y_max = 100
n_x = 101
n_y = 101
C0 = np.zeros((n_x, n_y))
x0_list = [30, 50, 80]
y0_list = [70, 30, 60]
Q_list = [10, 20, 30]
sigma_x = 10
sigma_y = 10
v_w = 1
theta_w = np.pi / 4
delta_t = 0.01
T = 10
dx = x_max / (n_x - 1)
dy = y_max / (n_y - 1)
def gaussian(x, y, x0_list, y0_list, Q_list):
C_total = 0
for x0, y0, Q in zip(x0_list, y0_list, Q_list):
C_total += Q * np.exp(-0.5 * ((x - x0)**2 / sigma_x**2 + (y - y0)**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
return C_total
for t in np.arange(delta_t, T + delta_t, delta_t):
C1 = np.zeros((n_x, n_y))
C2 = np.zeros((n_x, n_y))
C3 = np.zeros((n_x, n_y))
for i in range(n_x):
for j in range(n_y):
x = i * dx
y = j * dy
C1[i, j] = Q_list[0] * np.exp(-0.5 * ((x - x0_list[0])**2 / sigma_x**2 + (y - y0_list[0])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C2[i, j] = Q_list[1] * np.exp(-0.5 * ((x - x0_list[1])**2 / sigma_x**2 + (y - y0_list[1])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C3[i, j] = Q_list[2] * np.exp(-0.5 * ((x - x0_list[2])**2 / sigma_x**2 + (y - y0_list[2])**2 / sigma_y**2)) / (2 * np.pi * sigma_x * sigma_y)
C_total = C1 + C2 + C3
C = C_total * np.exp(-(v_w * t)**2 / (2 * sigma_x**2) - ((dx/2 - v_w * t * np.sin(theta_w))**2 / (2 * sigma_x**2) + (dy/2 - v_w * t * np.cos(theta_w))**2 / (2 * sigma_y**2)))
C0 += delta_t * C
plt.imshow(C0.T, cmap=plt.cm.jet, extent=[0, x_max, 0, y_max], origin='lower')
plt.colorbar()
plt.scatter(x0_list[0], y0_list[0], color='r', marker='x', s=100)
plt.scatter(x0_list[1], y0_list[1], color='g', marker='x', s=100)
plt.scatter(x0_list[2], y0_list[2], color='y', marker='x', s=100)
plt.xlabel('x')
plt.ylabel('y')
plt.show()