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名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/122711.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python测试框架 Pytest —— mock使用(pytest-mock)

pytest-mock 安装:pip install pytest-mock 这里的mock和unittest的mock基本上都是一样的,唯一的区别在于pytest.mock需要导入mock对象的详细路径。 # weateher_r.py class Mock_weather():def weather(self):天气接口passdef weather_result(self):模…

异常-java

目录 一、异常的概念和体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 二、异常的处理 2.1 防御式编程 2.2 异常抛出 2.3 异常捕获 2.4 异常处理流程 三、自定义异常类 一、异常的概念和体系结构 1.1 异常的概念 程序员在开发过程中,想要将代码写得…

《代码随想录》刷题笔记——链表篇【java实现】

链表节点定义 public class ListNode {// 结点的值int val;// 下一个结点ListNode next;// 节点的构造函数(无参)public ListNode() {}// 节点的构造函数(有一个参数)public ListNode(int val) {this.val val;}// 节点的构造函数(有两个参数)public ListNode(int val, ListNo…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】 下篇:Go实现LogCollect:海量日志收集系统【下篇——开发LogTransfer】 项目架构图: 0 项目背景与方案选择 背景 当公司发展的越来越大,业务越来越复杂…

虚拟机扩容

系统环境centos8,分两步,第一步先在vmware扩容,第二部在虚拟机内部扩容 1.vmware分配磁盘空间 2.虚拟机内部扩容 查看当前磁盘信息,这个是扩容之前的,扩容完成才会显示新的 df -h查看系统分区信息 fdisk -l查看目录…

javaee spring aop 注解实现

切面类 package com.test.advice;import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*;//切面类 Aspect public class MyAdvice {//定义切点表达式Pointcut("execution(* com.test.service.impl.*.add(..))")public void pc(){}//B…

Git管理

Git管理 ①对于项目目录中有.git的,可以在idea里面更改远程提交地址 Git->>Manage Remotes 中修改远程提交地址 ②对于没有.git目录的项目 在项目的根目录下进入cmd,使用下面的语句初始化.git目录 ##初始化 git init

Leetcode 1486.数组异或操作

给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] start 2*i(下标从 0 开始)且 n nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的结果。 示例 1: 输入:n 5, …

springcloud-Eureka

1.Eureka注册中心 1.1 简介与依赖导入 1.2 服务注册与发现 启动eureka模块 访问Eureka 将user-service,book-service,borrow-service作为eureka的客户端,先导包。三个导入方式一样。 配置文件,三个模块下都一样配置 然后分别启动三个模块 发现注册…

MySQL性能分析工具的使用

1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。 整个流程划分成了 观察( Show status ) 和 行动( Action ) 两个部分。字母 S 的部分…

2023年09月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名(每月更新) 2023年09月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

JMeter(三十九):selenium怪异的UI自动化测试组合

文章目录 一、背景二、JMeter+selenium使用过程三、总结一、背景 题主多年前在某社区看到有人使用jmeter+selenium做UI自动化测试的时候,感觉很是诧异、怪异,为啥?众所周知在python/java+selenium+testng/pytest这样的组合框架下,为啥要选择jmeter这个东西[本身定位是接口测…

C# 子类如何访问子类的方法(同一父类)

在继承关系中,子类可以通过创建另一个子类的对象来访问其方法。下面是一个示例,展示了子类如何访问另一个子类的方法: public class Animal {public virtual void Speak(){Console.WriteLine("我是动物。");} }public class Cat :…

liunx下ubuntu基础知识学习记录

使用乌班图 命令安装使用安装网络相关工具安装dstat抓包工具需要在Ubuntu内安装openssh-server gcc安装vim安装hello word输出1. 首先安装gcc 安装这个就可以把gcc g一起安装2. 安装VIM3.编译运行代码 解决ubuntu与主机不能粘贴复制 命令安装使用 安装网络相关工具 使用ifconf…

C语言系统化精讲(一):C 语言开发环境搭建

文章目录 一、Windows 开发环境搭建1.1 安装 mingw 编译器1.2 下载并安装 CLion1.3 启动 CLion 二、Linux 开发环境搭建(建议使用)2.1 VMware Workstation Pro软件简介及安装2.2 安装 Ubuntu 系统2.2.1 Ubuntu 下载2.2.2 安装 Ubuntu2.2.3 安装共享文件夹…

智能手机收入和出货量双双下滑,造车成本不断增长,小米集团仍面临风险

来源:猛兽财经 作者:猛兽财经 华尔街分析师对小米集团第二季度的业绩预测 在8月29日小米集团(01810)公布其2023年第二季度财报之前,华尔街分析师曾预测该公司第二季度的业绩将超出2023年第一季度的业绩。 根据S&P …

实现无公网IP环境下远程访问本地Jupyter Notebook服务的方法及端口映射

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…

git 后悔药

前言 自上而下,撤销可以分为从远程库撤销,从本地库撤销,从暂存库撤销。 例子:代码已经提交了三个记录到远程库,分别对应了记录1,内容1,记录2,内容2,记录3,内…

【C++杂货铺】探索list的底层实现

文章目录 一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity(容量相关)1.2.4 list element access(元素访问)1.2.5 list modifiers(链表修改&#xff0…

网站监控系统最佳实践之静态资源采样上报

作者 观测云 产品服务部门 深圳团队 朱端畅 背景说明 通过 RUM 采集前端数据时,若采集的数据过多,可能会导致占用过多的网络带宽以及其他资源。特别是刚进入首页加载数据时,可能会调用几十次甚至更多次 v1/write/rum?precisionms数据采集接…