2021年数维杯国际大学生数学建模
B题 极端降雨的定量分析
原题再现:
近两年来,我国河南、陕西、湖北等地遭遇了极为罕见的暴雨。与此同时,北方一些城市遭遇了历史上罕见的暴风雪。这些暴雨和降雪对当地人民的生命、安全和财产构成严重威胁。以郑州市为例。7月18日18时至21日0时,郑州市出现暴雨和特大暴雨。累计平均降水量449mm,20日16:00~17:00郑州站降水量达到201.9mm,超过我国陆地每小时降水量的极值。而拥有千万人口的郑州正在经受暴雨的考验。7月17日开始断断续续下大雨,到7月20日上午,雨突然开始加大。当天下午,郑州市许多社区和道路被雨水淹没。郑州市气象局发布信息称,郑州市年平均降雨量为640.8mm,这三天的降雨量接近甚至超过往年。从气候学的角度来看,这是千年一遇。河南郑州市连续性暴雨给郑州市人民生命财产安全造成了巨大损失,严重影响了生产生活。截至7月23日12时,据初步统计,共紧急转移安置395989人,农作物受灾面积44209.73公顷,直接经济损失6550亿元,洪涝及暴雨次生灾害已造成数百人死亡。
据相关研究人员介绍,在全球变暖的背景下,我国未来降水的数量、强度、频率和类型都将受到直接影响。预计本世纪末降水量将增加10%左右,极端降水的概率将显著增加。由于我国陆地面积大,加上各类地形地貌等因素的综合影响,不同城市的降水特征表现出不同的特点。因此,建立不同潜在极端降水事件城市的预测模型和损失定量分析模型势在必行。
附件1为近70年郑州市3个气象站逐日降水观测资料。尝试使用数学建模解决以下问题:
问题1:对郑州地区降水特征的年变化特征进行相关分析,筛选出降水量较高的年份。同时,对郑州市2021年的洪水事件进行了具体的定量分析。
问题2:能否收集整理我国更多城市多年的降水数据,分析这些城市的降水趋势?(需明确说明数据来源及获取方式)
问题3:您能否利用收集到的城市天气数据,根据不同的方法对未来可能出现极端降雨的城市进行预测和分析,并对比分析您的预测效果?
问题4:您认为郑州2021年7月的暴雨特征与山西2021年10月的暴雨特征是否相同?造成损失的区别是什么。问题5:能否提出未来极端降水条件下城市的长期建设规划,其中对我国典型城市的深入分析尤为必要。
数据描述:
附件1为郑州市附件3各气象站70年气象观测资料。
整体求解过程概述(摘要)
极端降水将对人民的生命、安全和财产构成严重威胁。目前,我国极端降水事件给当地人民带来了巨大的损失,因此建立极端降水事件的预测模型和损失定量分析模型十分必要。
在任务1中,首先对数据进行预处理,以减少或消除数据中离群点的影响,进行后续的检测和分析。由于一年中缺少几天的资料,直接用资料中的总降水量代替相应的年总降水量会导致总降水量的减少和失真。为了减少数据失真的影响,利用Matlab计算年度数据的日平均降水量代替当年的日平均降水量,用该年的日平均降水量乘以当年的天数,得到相应年份的总降水量。随后,利用Mann-Kendall(M-K)方法对郑州地区降水进行突变分析,得到了2021年突变点的结果,与郑州市2021年暴雨的实际情况相吻合。利用小波分析方法分析了郑州市降水的周期关系,绘制了郑州市降水的实部等值线图、小波系数的模和模的平方、特征时间尺度的小波方差图和小波实过程线,并对2021年降水进行了分析。
在任务2中,收集了1951-2019年北京和太原的降水数据,并在国家海洋和大气管理局(NOAA)和中国地面气候日数据集上进行了编译。然后计算了平均日降水量和年降水总量。随后,利用M-K方法对北京和太原的降水量进行分析,并利用小波分析对太原降水的周期信息进行分析,进一步分析降水趋势。
任务3采用灰色预测和BP神经网络预测郑州、北京和太原2022、2023年的降水量,灰色预测值分别为38.04、38.77、24.35、25.56、17.08、17.07,相对绝对误差百分比分别为6.8832%、3.9433%和3.4808%。还绘制了图像。对于BP神经网络的预测,将降水量集划分为训练集和测试集,测试集用于检测神经网络的泛化能力。将预测值与实际值之差的绝对值除以实际值得到相对误差。取降水量预测相对误差的平均值,得到BP神经网络预测试验集的平均相对误差分别为16.37%、13.42%和20.59%,预测值分别为23.77、31.72、25.64、27.45、17.89和17.02。最后,通过分析对比预测结果,得出郑州市未来降水量仍较高的结论。从图像上看,北京未来可能出现极端降雨。
在任务4中,我们对郑州和山西两省洪水淹没事件中暴雨的暴雨和洪水损失特征进行了梳理,发现两地的降雨特征不同,这与地理环境、气候等环境因素有关。同时,降雨特征和自然环境的差异也造成了两地洪水损失的差异。
任务5总结了郑州市水灾事件的特点,发现我国大部分城市的规划建设虽然在一定程度上能够抵御特大暴雨天气,但短期内抵御特大暴雨的能力不足。以北京市为例,若将郑州市暴雨特征转移到北京市,北京市将发生严重内涝。对此,我们给出了城市的长远建设规划。最后,本文进行了评价和建模。
模型假设:
1、问题中1、2、3号观测站大部分数据能够真实反映郑州市降水情况,即不会出现观测站故障,造成大部分数据失真。
2、根据当年已存在的非异常日降水量计算的平均值,缺失数据较少,可代表当年的平均日降水量。
3、前期降水可用于预测。
问题分析:
数据分析
观测资料发现,1号站1957年开始观测,2号站1983年开始观测,3号站1961年开始观测。1957年只有12月份的数据。1958~1964年的数据缺失较多,这将对结果产生较大影响。此外,1965~1972年降水资料的缺乏也会对下一步的研究产生一定的影响。因此,我们选取1972年至2021年的数据进行本研究。同时,我们需要考虑数据的真实性。如果不是真实数据,需要替换或删除异常数据进行平滑处理。
问题1分析
问题一可分为以下三个问题:
1) 首先计算年平均降水量,然后进行相关分析。
2) 对郑州市降水特征的年变化特征进行了突变分析和周期分析。首先,利用M-K方法对郑州市年降水序列中是否存在突变点进行检测和诊断,找出突变点,验证郑州市2021年暴雨的真实性。其次,利用小波时间序列分析方法,充分了解降雨序列是否随时间呈周期性变化趋势。
3) 暴雨事件是一个复杂的系统。针对郑州市特大暴雨事件,重点研究了致灾因素和孕灾环境。致灾因子是基于层次分析法建立的暴雨灾害风险指标体系。灾害孕育环境是暴雨所特有的自然环境。通过对郑州市暴雨事件的定量分析,为我国城市规划防灾减灾提供参考。
问题二分析
第二个问题是,我们需要分析近年来中国更多城市的降水趋势。首先,我们需要有准确和真实的数据来源。建议通过国家气象数学中心和NOAA网站获取北京和山西历年的降水量、最大风速、海平面气压和能见度观测值,以供参考。然后利用年降雨量绘制折线图来反映变化趋势,并通过M-K检验和小波分析对变化特征进行分析。
问题三分析
第三个问题是建立不同潜在极端降水事件城市的预测模型。有多种预测模型可供选择,如Logistic、Markov、数据挖掘、深度学习等,但仍需结合本课题的降雨数据。同时,数据的采集和处理仍然是研究的重点。针对数据量的局限性,选用灰色预测法和BP神经网络对降水数据进行预测,并对预测结果进行对比分析,找出可能出现极端降水的城市。
问题4的分析
通过国家统计局、人民网、中新网、郑州等官方媒体,收集郑州、山西两省暴雨特征及暴雨损失数据,总结两地暴雨特征,对比分析两地洪水损失差异。结合两地的地理环境和暴雨特点,简要分析了造成洪水损失差异的原因。
问题五的分析
暴雨不仅是长期持续降水的累积效应,也是短期强降水引起的。我国的暴雨过程,特别是特大型极端暴雨过程,一般伴随着极端短期强降水天气[1],如2007年7月18日济南、2012年7月21日北京、2015年8月17日南充等,总体来看,郑州的暴雨事件将给任何城市造成巨大损失。因此,有必要对极端暴雨和极端短时强降水进行深入研究,特别是对北京、郑州等大城市灾害性极端暴雨的城市规划研究。
模型的建立与求解整体论文缩略图
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
for i = 1:19447
if GuanCeZhan1{i,2}==99.99
for j = 1:18665
% Check whether observation station 3 has this date.
%If there is such a date, the data will be replaced
if GuanCeZhan3{j,1}==GuanCeZhan1{i,1}
GuanCeZhan1{i,2}=GuanCeZhan3{j,2};
end
end
end
end
%For the data of observation station 1 replaced by observation station 3, use the same method to
replace observation station 1 with the data of observation station 2 (because it may still be an
abnormal value after replacing the abnormal value with 3)
for i = 1:19447
if GuanCeZhan1{i,2}==99.99
for j = 1:13973
%Check whether observation station 2 has this date. If so, replace the data
if GuanCeZhan2{j,1}==GuanCeZhan1{i,1}
GuanCeZhan1{i,2}=GuanCeZhan2{j,2};
end
end
end
end
%For the data that cannot be replaced (such as the data not available at the other two observation
stations in front of observation station 1), use the average value of the nearest rainfall to replace it
for i = 1:19447
if GuanCeZhan1{i,2}==99.99
for j=1:min(i-1,19447-i) %In order to keep the array from crossing the boundary, find
the nearest number in the maximum searchable radius that is not 99.99
if (GuanCeZhan1{i+j,2}~= 99.99)&&(GuanCeZhan1{i-j,2}~= 99.99)
GuanCeZhan1{i,2}=(GuanCeZhan1{i-j,2}+GuanCeZhan1{i+j,2})/2;
end
end
end
end
%Check whether 99.99 still exists. If a appears in the variable, it still exists
for i = 1:19447
if GuanCeZhan1{i,2}==99.99
a=1;
end
end
ZuiZhongGuanCeZhan1=cell(19447,2);
for i = 1:19447
ZuiZhongGuanCeZhan1{i,1} = char(JGGuanCeZhan1{i,1});
end
%Extraction year
for i = 1:19447
ZuiZhongGuanCeZhan1{i,1} = ZuiZhongGuanCeZhan1{i,1}(1:4);
end
%Convert year to number
for i = 1:19447
ZuiZhongGuanCeZhan1{i,1} = str2num(ZuiZhongGuanCeZhan1{i,1});
end
%Make up the precipitation in the second column and convert it into a digital matrix as a whole
ZuiZhongGuanCeZhan12=zeros(19447,2);
for i = 1:19447
ZuiZhongGuanCeZhan12(i,1) = ZuiZhongGuanCeZhan1{i,1};
ZuiZhongGuanCeZhan12(i,2) = JGGuanCeZhan1{i,2};
end
%Calculate the average annual precipitation
NianZong = zeros(19447,2); %The total annual precipitation, but due to the lack of individual
days, it will be very small in individual years, so it will be more convincing to use the average
precipitation
NianPingJun = zeros(19447,2); %Average annual precipitation
NianZong(1,2) = ZuiZhongGuanCeZhan12(1,2);
j = 1; %j is used to count how many times it is added every year
k = 1; %k is used to put the number of years of change on the next line, starting with the first line
for i = 1:19447-1%-1 is because 19447 will be added to 19446
MuQianNianFen = ZuiZhongGuanCeZhan12(i,1); %What year is it now, the current year
XiaYiGeNianFen = ZuiZhongGuanCeZhan12(i+1,1); %What year is to be added, the next
year
if MuQianNianFen == XiaYiGeNianFen
%If the years are the same, the number of rows remains the same, and the data of the next
year is added
NianZong(k,2) = NianZong(k,2)+ZuiZhongGuanCeZhan12(i+1,2);
j = j+1; %How many numbers have been added to the calculation
else
%If the years are different, cut down one line and add the data
NianPingJun(k,2) = NianZong(k,2)/j;
%If the years are different, start calculating the previous average
j = 1; %Initialize j
k=k+1;
NianZong(k,2) = NianZong(k,2)+ZuiZhongGuanCeZhan12(i+1,2);
end
%Finally, the average precipitation in 2021 is calculated
NianPingJun(k,2) = NianZong(k,2)/j;
end
nianfen = [1957:1964,1973:2021]';
NianZong(1:57,1) = nianfen;
NianPingJun(1:57,1) = nianfen;
NianPingJun = NianPingJun(1:57,:);