云中的海盐
摘要
在全球气候变暖的背景下,地球工程提供了一系列可能的技术解决方案,其中海盐气溶胶的喷洒是一种具有潜力的太阳辐射管理方法。本文基于自行收集的数据,建立数学模型以评估海盐气溶胶对北冰洋海冰的潜在影响。
对于问题一,设计喷洒海盐气溶胶的方案。设计目标函数来最大化北冰洋海冰的面积或厚度。喷洒区域、喷洒量、喷洒时间、喷洒频率作为决策变量。选择物理和化学限制、技术和操作限制、气象和气候限制、经济和资源限制等作为约束条件,。利用粒子群优化算法对模型进行求解,以期找到最优喷洒策略。
对于问题二,监控和调节喷洒效果。收集涉及气候、环境、海盐气溶胶喷洒的历史和实时数据,包括气候模式、海冰数据、大气成分等数据,首先进行数据预处理。利用matlab的find检查是否有缺失值。得出收集数据并无缺失值。对于异常值处理,首先对数据进行K-S检验判定其分布方式,得出非正态分布的。对于该数据集使用箱型图进行判定异常值,对最终的异常数据进行剔除,将剔除后的数据使用克里金进行插值。以气温为因变量,其他四个可控变量作为自变量构建预测模型,选择时间序列分析、随机森林、支持向量机、神经网络四种预测模型,进行预测。对于预测结果进行线性加权,以误差最小为目标函数,权重系数和为1为约束条件构建优化模型进行求解,提高响应策略的适应性和精确性。
对于问题三,确定干预的安全阈值。首先以海盐浓度作为自变量(X),其他变量作为因变量(Y)。进行回归分析:使用线性或非线性回归模型来描述海盐浓度与其他变量之间的关系。阈值分析:通过回归模型,确定海盐浓度的安全阈值,即当海盐浓度超过此阈值时,可能导致其他变量达到极端值或不可逆的变化。最后进行敏感性分析:对海盐浓度进行敏感性分析,评估其对其他气候变量的影响强度和速度,以辨识可能的风险和不可逆变化。
本文不仅提出了一套实际可行的海盐气溶胶喷洒方案,还展示了如何通过科学方法监控和调整该方案,确保其环境安全性和有效性。通过这些研究,期望为全球气候治理提供新的科学依据和技术路径。
关键词:地球工程,海盐气溶胶,北冰洋,气候变化,数学模型,环境监测
必读!!!为了防伪,目前论文中所有图片均有水印,结束前一天将公布无水印版本
使用须知:该论文完全按照提交格式进行写作,很多人都会看到这一版本成品论文,直接提交一定会查重不过关。成品论文是按着之前的解题思路写出的,如果不对外展示,在普通建模竞赛是可以直接提交100%获奖的文章,保二冲一的水平。进行展示的目的,是为了辅助大家写论文。也让大家心里有个数大概获奖论文是个什么层次。【写的比我好就是一、二等奖,比我差就是三等奖、优秀奖】
组委会要求重要格式规范如下所示,大家可以根据要求,以及1资料中提供的优秀论文资料进行修改。以下是竞赛论文要求,请认真阅读!!
1、第一页还有论文标题、摘要和关键词(无需译成英文),并从此页开始编写页码;页码必须位于每页页脚中部,用阿拉伯数字从“1 ”开始连续编号。
2、论文从第二页开始是论文正文;正文之后是参考文献和论文附录(页数不限)。附录需要填写一个表格,交代程序代码名称等信息。
3、引用别人的成果或其他公开的资料(包括网上查到的资料) 必须按照规定的参考文献的表述方式在正文引用处和参考文献中均明确列出。正文引用处用方括号标示参考文献的编号,如[1][3]等;引用书籍还必须指出页码。参考文献按正文中的引用次序列出。
使用、借鉴、抄写该论文是否违规:只要不超过查重率的20%,就不能算作违规。该论文属于公开发表的网上资料,进行借鉴、参考不能算作违规,切记不要抄的太过分,查重率一定要低于20%就可以。下图为最新的数模竞赛规定
5.1 问题一的建立与求解
5.1.1 优化模型的构建
的模型旨在通过喷洒海盐气溶胶来维持或增加北冰洋的海冰总量。模型将根据海盐气溶胶的喷洒参数(区域、量、时间、频率)预测海冰的面积和厚度的变化。
目标函数
目标函数的设计旨在最大化北冰洋的海冰面积和厚度。设定目标函数为海冰的面积和厚度的加权和,权重可根据实际情况调整:
5.2.1 数据收集
Barrow(现名Utqiaġvik),位于美国阿拉斯加州的最北端,是北美洲最北的永久居民点。它位于北极圈内,具体坐标大约为71.3度北纬和156.6度西经。Utqiaġvik的地理位置使其具有独特的气候和生态特征,同时也是气候变化研究的重要地点之一。Barrow的极端气候条件提供了一个独特的环境,用以研究极端气温、海冰覆盖变化及极夜和极昼现象对气候系统的影响。这里的数据可以帮助科学家们更好地理解极地气候系统的运作及其对全球气候的潜在影响。由于其位于气候变化的前线,Barrow已经配备了高度发达的监测设施,包括NOAA和其他国际气候监测组织的设施。这些设施能够提供高质量的实时数据,对于监控气候干预措施如海盐气溶胶的影响尤为重要。
为了进一步研究收集了该地区的气温 (°C) 降水 (mm) 风速 (m/s) 湿度 (%) 海冰覆盖面积 (平方公里) 厚度 (m) 密度 (kg/m3) 海盐浓度 (ppt) 大气光学厚度 (无量纲) 辐射强迫 (W/m2) 旅游业活动 (等级) 渔业捕获量 (吨) 海洋生物多样性指数 (无量纲) 海洋生物健康状况 (等级)。具体内容如下所示
指标名称 | 单位 | 描述 |
气温 | °C | 描述地区的温度条件,关键于理解年度和季节性气候模式。 |
降水 | mm | 测量该地区的降水量,包括雨、雪等,影响地表水资源和生态系统水分供应。 |
风速 | m/s | 对于理解风对海冰运动和分布的影响至关重要,也影响天气模式和海洋表面的蒸发率。 |
湿度 | % | 指空气中水蒸气含量,影响降水、雪的形成和干旱的发生。 |
为了收集上述所述指标,在下述网站进行收集最终得到数据表格如下所示
指标 | 数据来源网站 | 内容 |
气温 (°C)、降水 (mm)、风速 (m/s)、湿度 (%) | NOAA Climate Data Onlinehttps://docs.qq.com/doc/DSGFnelNhUVlxZXZr | 提供全球范围内的气温、降水量、风速和湿度数据 |
海冰覆盖面积 (平方公里)、厚度 (m)、密度 (kg/m³) | 美国国家冰雪数据中心 (NSIDC)https://docs.qq.com/doc/DSGFnelNhUVlxZXZr | 提供关于海冰覆盖面积、厚度和密度的数据。 |
海盐浓度 (ppt) | NASA Ocean Biology Distributed Active Archive Centerhttps://docs.qq.com/doc/DSGFnelNhUVlxZXZr | 提供关于海水中盐度和其他生化指标的信息。 |
大气光学厚度 (无量纲) | AERONET (NASA的气溶胶机器人网络)https://aeronet.gsfc.nasa.gov/ | 提供全球范围的大气光学厚度测量。 |
% 读取CSV文件
data = readtable('问题二数据.csv', 'PreserveVariableNames', true);
% 修正列名以便于后续操作
data.Properties.VariableNames = {'day', 'C', 'mm', 'm_s', 'percent', ...
'km2', 'm', 'kg_m3', 'ppt', '大气光学厚度', ...
'W_m2', '旅游活动_等级', '渔业捕获量_吨', '海洋生物多样性指数', '海洋生物健康状况_等级'};
% 设置日期为时间表索引
data = table2timetable(data);
% 列名数组
columns = {'C', 'mm', 'm_s', 'percent', ...
'km2', 'm', 'kg_m3', 'ppt', '大气光学厚度', ...
'W_m2', '旅游活动_等级', '渔业捕获量_吨', '海洋生物多样性指数', '海洋生物健康状况_等级'};
% 对每个变量进行K-S检验和异常值处理
for i = 1:length(columns)
col_name = columns{i};
% K-S检验和Q-Q图
figure;
subplot(1, 2, 1);
qqplot(data.(col_name));
title(['Q-Q Plot of ', col_name]);
subplot(1, 2, 2);
[h, p, ksstat, cv] = kstest(data.(col_name) - nanmean(data.(col_name)) / nanstd(data.(col_name)));
histogram(data.(col_name), 'Normalization', 'pdf');
hold on;
x_values = linspace(min(data.(col_name)), max(data.(col_name)), 100);
plot(x_values, normpdf(x_values, nanmean(data.(col_name)), nanstd(data.(col_name))), 'r-');
title(['Histogram of ', col_name]);
disp(['K-S test for ', col_name, ': D = ', num2str(ksstat), ', p-value = ', num2str(p)]);
% 异常值检测
if p > 0.05 % 数据近似正态分布
[outliers, lb, ub] = detect_outliers_normal(data, col_name);
else % 数据非正态分布
[outliers, lb, ub] = detect_outliers_non_normal(data, col_name);
end
% 可视化异常值
figure;
plot(data.day, data.(col_name), 'b-', 'DisplayName', 'Data');
hold on;
plot(outliers.day, outliers.(col_name), 'ro', 'DisplayName', 'Outliers');
yline(lb, 'r--', 'DisplayName', 'Lower Bound');
yline(ub, 'r--', 'DisplayName', 'Upper Bound');
xlabel('Date');
ylabel(col_name);
title(['Outliers in ', col_name]);
legend;
% 处理异常值:线性插值
outlier_indices = isoutlier(data.(col_name), 'mean');
data.(col_name)(outlier_indices) = NaN;
data.(col_name) = fillmissing(data.(col_name), 'linear');
% 重新绘制插值结果
figure;
plot(data.day, data.(col_name), 'g-', 'DisplayName', 'Cleaned Data');
xlabel('Date');
ylabel(col_name);
title(['Cleaned Data for ', col_name]);
legend;
end
import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as plt
import seaborn as sns
# 读取上传的CSV文件
file_path = '问题二数据.csv'
data = pd.read_csv(file_path, encoding='ISO-8859-1')
# 修正列名以便于后续操作
data.columns = ['日期', '气温(°C)', '降水量(mm)', '风速(m/s)', '湿度(%)', '海冰覆盖面积(平方公里)',
'厚度(m)', '密度(kg/m3)', '海盐浓度(ppt)', '大气光学厚度(无量纲)',
'辐射强度(W/m2)', '旅游活动(等级)', '渔业捕获量(吨)', '海洋生物多样性指数(无量纲)',
'海洋生物健康状况(等级)']
# 设置日期为索引
data['日期'] = pd.to_datetime(data['日期'])
data.set_index('日期', inplace=True)
# K-S检验和Q-Q图函数
def ks_test_and_qq_plot(data, col_name):
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用SimHei字体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
plt.figure(figsize=(14, 6))
# Q-Q图
plt.subplot(1, 2, 1)
stats.probplot(data[col_name], dist="norm", plot=plt)
plt.title(f'Q-Q plot of {col_name}')
# K-S检验
d, p_value = stats.kstest(data[col_name], 'norm')
print(f"K-S test for {col_name}: D={d}, p-value={p_value}")
plt.subplot(1, 2, 2)
sns.histplot(data[col_name], kde=True)
plt.title(f'Histogram of {col_name}')
plt.show()
return d, p_value
# 使用3西格玛原则判定正态分布数据的异常值
def detect_outliers_normal(data, col_name):
mean = data[col_name].mean()
std = data[col_name].std()
lower_bound = mean - 3 * std
upper_bound = mean + 3 * std
outliers = data[(data[col_name] < lower_bound) | (data[col_name] > upper_bound)]
return outliers, lower_bound, upper_bound
# 使用箱型图判定非正态分布数据的异常值
def detect_outliers_non_normal(data, col_name):
Q1 = data[col_name].quantile(0.25)
Q3 = data[col_name].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = data[(data[col_name] < lower_bound) | (data[col_name] > upper_bound)]
return outliers, lower_bound, upper_bound