2023年数维杯数学建模A题河流-地下水系统水体污染研究求解全过程文档及程序

本文主要是介绍2023年数维杯数学建模A题河流-地下水系统水体污染研究求解全过程文档及程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2023年数维杯数学建模

A题 河流-地下水系统水体污染研究

原题再现:

  河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响工农业的正常运作、社会经济的发展和饮水安全。在地下水污染中最难治理和危害最大的是有机污染,因而对有机污染物在河流-地下水系统中的行为特征进行研究具有十分重要的理论意义和实际价值。另外,已有研究表明在河流地下水系统中有机污染物的行为特征主要涉及对流迁移、水动力弥散、吸附及阻滞等物理过程、化学反应过程以及生物转化过程等。现设地下水渗流场为各向同性均质的稳态流,对有机污染物的迁移和转化规律进行研究和探索,并完成以下问题。
  问题1 通过查阅相关文献和资料,分析并建立河流-地下水系统中有机污染物的对流、弥散及吸附作用的数学模型 。
  问题2 试利用下面介绍的内容和表中试验参数以及数据依据数学模型研究某有机污染物在河流-地下水系统中的迁移转化机理。
  1) 对流、弥散试验参数
  通过试验测得河流-地下水系统中某有机污染物的对流、弥散有关参数见表1。
在这里插入图片描述
  2)吸附动力学试验结果
  四种不同河流沉积物对初始浓度为0.5mg/L左右的某有机污染物吸附体系的吸附动力学过程及不同吸附时间测得固、液相某有机物的浓度列于表2中.

在这里插入图片描述
  3)等温平衡吸附试验结果
  地下水中有机污染物的吸附行为采用等温平衡吸附的数学模型描述,四种不同沉积物对10种不同初始浓度的某有机污染物24小时的等温平衡吸附试验结果列于表3中.
在这里插入图片描述
  问题3 生物降解是污染物一个很重要的转化过程,考虑生物降解作用对有机污染物转化的影响,建立适当的数学模型,试结合表4中的试验数据分析微生物对该有机污染物的降解特性。
在这里插入图片描述

整体求解过程概述(摘要)

  党的二十大报告指出,“深入推进环境污染防治,统筹水资源、水环境、水生态治理,推动重要江河湖库生态保护治理,基本消除城市黑臭水体”。其中河流和地下水系统在人类生活中发挥关键作用。当污染发生时,河流对地下水的补给可能导致周边水源受污,影响工农业运作、社会发展及饮水安全。在地下水污染中,有机污染物的问题最为棘手。为了解这类污染物在河流-地下水系统中的行为,我们需要深入研究其物理、化学反应和生物转化过程。本研究将以各向同性均质的稳态流作为地下水渗流场,探究有机污染物的迁移与转化规律。
  对于问题一,我们查阅相关文献资料分别得出对流方程、弥散方程以及吸附作用方程。我们将基于质量守恒方程与一些假设条件,建立描述有机污染物浓度变化的一维及多维对流-弥散-吸附微分方程,接着通过有限差分法求解该一维微分方程,以便直观地观察模型参数对有机污染物迁移转化过程的影响。
  对于问题二,我们将基于给定的四种有机物液、固相实验数据,对模型进行参数调整和检验。首先,基于对流、弥散试验参数,更新微分方程的模型参数,以更准确地描述有机污染物的迁移转化过程;然后,根据四种不同河流沉积物的吸附动力学数据,重新计算吸附系数k值,由于给定的时间数据比较离散,本文使用插值方法进行数值模拟,将更新后的k值用于微分方程求解;最后,基于四种有机物液、固相状态下的初始浓度与平衡浓度数据,通过匹配对可以迭代计算出初始浓度与等温吸附24小时后平衡的浓度的吸附系数k值。然后求均值作为吸附系数k,更新微分方程模型参数。
  对于问题三,我们将在微分方程模型中引入生物降解过程,以研究微生物对有机污染物的降解特性,假设生物降解速率与微生物浓度M和有机物浓度C之间存在线性关系,则可在原有的对流弥散-吸附模型中添加生物降解项,形成新的数学模型一对流-弥散-吸附-生物降解的微分方程。

问题分析:

  问题1要求我们从已有的相关理论研究和实证分析中找到适用于本题的数学模型,用以描述河流-地下水系统中有机污染物的对流、弥散及吸附作用。由于团队相关专业知识的了解程度较低,我们决定将问题简化,建立描述河流-地下水系统中有机污染物变化的一维对流—弥散—吸附微分方程,并通过有限差分法求解该方程,以便能够直观地呈现出模型参数对有机物污染物迁移转化过程的影响,同时有利于求解问题2。
  对于第二个问题,我们将基于给定的实验数据,对模型进行参数调整和验证。首先,我们将优化微分方程的模型参数,以更准确地描述有机污染物的迁移转化过程。然后,我们将根据四种不同河流沉淀物的吸附动力学数据, 重新计算吸附系数k 值。由于给定的时间数据比较离散,我们将考虑结合插值方法进行数值模拟,最后,我们将对每种有机物在不同状态下的浓度变化情况进行模拟,以验证我们的模型和参数调整的有效性。
  对于第三个问题,我们将在微分方程模型中引入生物降解过程,以研究微生物对有机污染物的降解特性。具体地,我们将在原有的对流-弥散-吸附模型中添加生物降解项,形成新的数学模型。然后,我们将根据河流等温平衡吸附24小时后的浓度变化数据,通过迭代计算方法求解吸附系数k值。最后,我们将求得的k值的均值作为新模型的吸附系数k,以此来更新我们的数学模型。

模型假设:

  1.一维空间假设:将河流-地下水系统近似为一维空间,忽略横向扩散和纵向非均匀性;
  2.连续性假设:假设有机污染物的浓度分布在空间上具有一定的连续性和平滑性,可以用微分方程来描述;
  3.线性生物降解假设:假设生物降解速率与微生物浓度和有机物浓度之间存在线性关系,用生物降解速率常数上表示;
  4.稳态吸附假设:假设吸附过程处于稳态,吸附系数k不随时间变化;
  5.地下水流速相对于孔隙流速u来说较小,因此可以忽略其对流的影响。

论文缩略图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
for dd in range(1,13,3):
# 模型参数
L = 100 # 系统长度(单位:m)
Nx = 24 # 空间离散化点数
T = 24 # 模拟时间(单位:天)
Nt = 1000 # 时间离散化步数
dx = L / (Nx - 1) # 空间步长
dt = T / Nt # 时间步长
v = 0.1 # 水流速度(单位:m/day)
D = 0.01 # 弥散系数(单位:m²/day)
k = 0.001 # 吸附系数(单位:1/day)
# 初始条件
C0 = np.zeros(Nx) # 初始浓度分布
C0[int(Nx / 2)] =dd # 在中心位置设置初始浓度为1.0
# 数值求解
C = np.zeros((Nt, Nx)) # 存储浓度分布的数组
C[0, :] = C0
for t in range(1, Nt)
for x in range(1, Nx - 1):
# 对流项
convective = -v * (C[t-1, x] - C[t-1, x-1]) / dx
# 弥散项
dispersive = D * (C[t-1, x+1] - 2 * C[t-1, x] + C[t-1, x-1]) / (dx**2)
# 吸附项
adsorption = -k * C[t-1, x]
# 数值更新
C[t, x] = C[t-1, x] + dt * (convective + dispersive + adsorption)
# 绘制浓度随时间和空间的分布图
x = np.linspace(0, L, Nx)
t = np.linspace(0, T, Nt)
X, T = np.meshgrid(x, t)
plt.contourf(X, T, C, cmap='cool')
plt.colorbar(label='浓度')
plt.xlabel('距离 (m)')
plt.ylabel('天数 (days)')
plt.title('浓度为%s_污染物浓度'%dd)
plt.savefig('./Q1/浓度为%s_污染物浓度.jpg'%dd)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
for dd in range(1,13,3):
# 模型参数
L = 100 # 系统长度(单位:m)
Nx = 24 # 空间离散化点数
T = 24 # 模拟时间(单位:天)
Nt = 1000 
dx = L / (Nx - 1) # 空间步长
dt = T / Nt # 时间步长
v = 0.1 # 水流速度(单位:m/day)
D = 0.01 # 弥散系数(单位:m²/day)
k = 0.001 # 吸附系数(单位:1/day)
# 初始条件
C0 = np.zeros(Nx) # 初始浓度分布
C0[int(Nx / 2)] =dd # 在中心位置设置初始浓度为1.0
# 数值求解
C = np.zeros((Nt, Nx)) # 存储浓度分布的数组
C[0, :] = C0
for t in range(1, Nt):
for x in range(1, Nx - 1):
# 对流项
convective = -v * (C[t-1, x] - C[t-1, x-1]) / dx
# 弥散项
dispersive = D * (C[t-1, x+1] - 2 * C[t-1, x] + C[t-1, x-1]) / (dx**2)
# 吸附项
adsorption = -k * C[t-1, x]
# 数值更新
C[t, x] = C[t-1, x] + dt * (convective + dispersive + adsorption)
# 绘制浓度随时间和空间的分布图
x = np.linspace(0, L, Nx)
t = np.linspace(0, T, Nt)
X, T = np.meshgrid(x, t)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, T, C, cmap='viridis')
ax.set_xlabel('距离 (m)')
ax.set_ylabel('天数 (days)')
ax.set_zlabel('浓度')
ax.set_title('浓度为%s_污染物浓度' % dd)
plt.savefig('./Q2_1/_浓度为%s_污染物浓度.jpg' % dd)
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['STSong']
plt.rcParams['axes.unicode_minus'] = False
# 创建数据集
data3 = pd.DataFrame({
'初始浓度': [0.0681, 0.1372, 0.2177, 0.3302, 0.4324, 0.5338, 0.5842, 0.6222, 0.7062, 0.7956],
'S1液相': [0.0461, 0.0722, 0.1235, 0.2150, 0.2951, 0.3716, 0.3969, 0.4547, 0.4852, 0.5714],
'S1固相': [0.1702, 0.6005, 0.8921, 1.102, 1.323, 1.572, 1.823, 2.100, 2.160, 2.192],
'S2液相': [0.0246, 0.0492, 0.0903, 0.1725, 0.2563, 0.3376, 0.3574, 0.3701, 0.4352, 0.5043],
'S2固相': [0.1852, 0.8301, 1.224, 1.527, 1.711, 1.912, 2.218, 2.471, 2.660, 2.863],
'S3液相': [0.0424, 0.0654, 0.1091, 0.2068, 0.2614, 0.3304, 0.3852, 0.4065, 0.4467, 0.5999],
'S3固相': [0.2071, 0.6683, 1.036, 1.184, 1.660, 1.984, 1.940, 2.107, 2.545, 2.937],
'S4液相': [0.0354, 0.0613, 0.0993, 0.1931, 0.2528, 0.2879, 0.3568, 0.4195, 0.5071, 0.5061],
'S4固相': [0.2772, 0.7101, 1.134, 1.321, 1.546, 1.781, 2.124, 1.977, 2.461, 2.845]
})
# 创建数据集
data4 = pd.DataFrame({
'浓度': [0.483, 0.479, 0.452, 0.418, 0.371, 0.342, 0.319, 0.311, 0.309],
'微生物浓度': [1.50E+07, 1.70E+07, 2.00E+07, 2.50E+07, 3.00E+07, 3.30E+07, 3.50E+07, 3.70E+07, 3.70E+07],
'有机物浓度比': [1, 0.991718427, 0.935817805, 0.865424431, 0.768115942, 0.708074534, 0.660455487, 0.64389234, 0.639751553],
'天数': [0, 1, 2, 3, 4, 5, 6, 7, 8]
})
from scipy.interpolate import interp1d
for ii in data3.columns[1:]:
# 模型参数
L = 100 # 系统长度(单位:m)
Nx = 24 # 空间离散化点数
T = 24 # 模拟时间(单位:天)
Nt = 1000 # 时间离散化步数
dx = L / (Nx - 1) # 空间步长
dt = T / Nt # 时间步长
# 河流-地下水参数
u = 38.67 * 0.01 # 平均孔隙流速(单位:m/day),将单位转换为cm/d
ν = 5.01 * 0.01 # 地下水渗流流速(单位:m/day),将单位转换为cm/d
D = 0.38 * (1 / 1440) * 0.01**2 # 弥散系数(单位:cm²/min 转换为 m²/d)
k = 6.32 * 0.01 # 渗透系数(单位:m/day),将单位转换为cm/d
μ = 0.01 # 生物降解速率常数
# 含水层样品的干密度和孔隙度
ρ = 1.67 # 干密度(单位:g/cm³)
n = 0.375 # 孔隙度
print(ii)
temp=data3[['初始浓度',ii]]
k_list=[]
for i in range(temp.shape[0]):
# 计算吸附系数
C_max =temp.iloc[i,0] # 最大吸附浓度
Ce = temp.iloc[i,1] # 平衡浓度
k = C_max / (Ce - C_max) * (ρ * n)
k_list.append(k)
k=np.mean(k_list)
# 初始条件
C0 = np.zeros(Nx) # 初始浓度分布
C0[int(Nx / 2)] =0.483# 在中心位置设置初始浓度为1.0
# 数值求解
C = np.zeros((Nt, Nx)) # 存储浓度分布的数组
C[0, :] = C0
# 创建插值函数
# 时间插值
interp_func = interp1d(data4['天数'], data4['浓度'], kind='quadratic')
time_interp = np.linspace(0, T, Nt)
for t in range(1, Nt):
for x in range(1, Nx - 1):
# 对流项
convective = -(u + ν) * (C[t-1, x] - C[t-1, x-1]) / dx
# 弥散项
dispersive = D * (C[t-1, x+1] - 2 * C[t-1, x] + C[t-1, x-1]) / (dx**2)
# 吸附项
adsorption = -k * (ρ * n * C[t-1, x])
# 生物降解项
bio_degradation = -μ * C[t-1, x] * interp_func(np.clip([t * dt], 0, data4["浓
度"].iloc[-1]))
# 数值更新
C[t, x] = C[t-1, x] + dt * (convective + dispersive + adsorption +
bio_degradation)
# # 数值更新
# C[t, x] = C[t-1, x] + dt * (convective + dispersive + adsorption)
# 绘制浓度随时间和空间的分布图
x = np.linspace(0, L, Nx)
t = np.linspace(T, 0, Nt)
if '固' in ii:
# 绘制浓度随时间和空间的分布图
x = np.linspace(0, L, Nx)
t = np.linspace(0, T, Nt)
else:
# 绘制浓度随时间和空间的分布图
x = np.linspace(0, L, Nx)
t = np.linspace(T, 0, Nt)
X, T = np.meshgrid(x, t)
plt.contourf(X, T, C, cmap='seismic')
plt.colorbar(label='浓度')
plt.xlabel('距离 (m)')
plt.ylabel('天数 (days)')
plt.title('%s 污染物浓度'%ii)
plt.savefig('./Q3/%s 污染物浓度.jpg'%ii)
plt.show()
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

这篇关于2023年数维杯数学建模A题河流-地下水系统水体污染研究求解全过程文档及程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173755

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col