2024“华数杯”国际大学生数学建模竞赛(A题)| 建模秘籍&文章代码思路大全
数字商品 教育 / 知识

2024“华数杯”国际大学生数学建模竞赛(A题)| 建模秘籍&文章代码思路大全

数学建模小秘籍 · 2 · 0

商品介绍
铛铛!小秘籍来咯!
小秘籍希望大家都能轻松建模呀,华数杯也会持续给大家放送思路滴~
 抓紧小秘籍,我们出发吧~

代码思路已更新!

完整内容可以在文章末尾领取!

问题重述:
2024 “Huashu Cup” 国际数学建模大赛 - Problem A: 放射性 Tritium 污染问题

背景:2011年3月,日本东海岸发生地震引发福岛第一核电站事故,导致三座核反应堆熔毁。为了冷却熔化的核燃料,海水被持续注入反应堆,产生大量受放射性核素污染的冷却水。尽管受到各国民众的反对,日本政府于2023年8月24日强制性地向太平洋排放经过处理的福岛放射性冷却水,总量超过100万吨。该排放计划预计将持续至少30年。

问题一:通过建立数学模型,考虑水流、环境等多因素,描述放射性 Tritium 冷却水在海水中的扩散过程。已知截至2023年8月27日零时,日本已向海洋排放1095吨放射性 Tritium 冷却水。如果未来不再排放冷却水,请预测截至2023年9月27日,日本海域内的 Tritium 污染范围和程度。

问题二:假设日本政府在2023年已进行三次排放冷却水,如果未来不再排放,请建立数学模型研究三次排放后 Tritium 冷却水的扩散路径。考虑洋流模式、水流动力学、海底地形、水深变化、潮汐影响和季节波动等因素。请估计需要多长时间,中国领海可能受到污染。

问题三:相关部门在日本政府宣布排放 Tritium 冷却水后,对1万名中国居民进行了调查,调查结果如下表所示。请分析调查结果,评估放射性 Tritium 冷却水排放事件对中国未来渔业经济的长期影响。

表1. 放射性 Tritium 冷却水排放事件后是否购买和食用海鲜的调查结果:

购买并食用海鲜 不再购买食用海鲜 总数
曾购买并食用海鲜 2238 6437 8675
曾不购买食用海鲜 67 1258 1325
总数 2305 7695 10000
问题四:在日本排放 Tritium 冷却水后的30年后,判断全球海域是否会被污染,以及哪个地方可能受到污染最严重。请预测完全污染的年份和最受影响的地区。

问题五:基于你的研究,向联合国环境规划署写一封1页的建议信。附上你的研究摘要、目录、完整解决方案以及参考文献列表。注意总页数不超过25页。

问题一
问题一的解题建模思路:
1. 问题分析:
问题一要求通过建立数学模型,考虑水流、环境等多因素,描述放射性 Tritium 冷却水在海水中的扩散过程。我们需要确定 Tritium 污染在未来一个月内的扩散范围和程度。

2. 建立扩散模型:
考虑 Tritium 冷却水的扩散,我们可以使用扩散方程进行建模。该方程可以描述 Tritium 浓度在时间和空间上的变化。使用二维偏微分方程来表示 Tritium 浓度的演化:

∂ C ∂ t = D ∇ 2 C \frac{\partial C}{\partial t} = D \nabla^2 C
∂t
∂C

 =D∇ 
2
 C

其中,C CC 是 Tritium 浓度,D DD 是 Tritium 的扩散系数,∇ 2 \nabla^2∇ 
2
 是 Laplace 算子,t tt 是时间。这个方程考虑了 Tritium 在海水中的扩散过程。

3. 边界条件的考虑:
边界条件对模型的准确性至关重要。考虑海域的边界上的海水流动、地形等因素。流动边界条件可通过引入流速、地形边界条件可通过考虑海底地形等因素,以模拟 Tritium 浓度在边界上的变化。

4. 初始条件的设定:
设定 Tritium 浓度的初始条件,根据问题描述,使用已排放的1095吨 Tritium 冷却水作为初始条件。

5. 数值求解:
使用数值方法进行求解,如有限差分法。通过离散化时空域,迭代计算 Tritium 浓度的变化。在每个时间步和空间点上,使用扩散方程更新 Tritium 浓度。

6. 预测 Tritium 污染范围和程度:
通过数值求解得到 Tritium 浓度分布,预测 Tritium 污染在未来一个月内的扩散范围和程度。可视化结果、绘制 Tritium 浓度的等值线图或三维图,以更好地理解 Tritium 污染的传播情况。

7. 结果分析:
分析模型预测的结果,考虑水流、环境等因素对 Tritium 污染的影响。结果将提供 Tritium 污染在海域中的传播情况的详细信息。

这一综合建模思路考虑了 Tritium 污染的多个方面,包括水流、环境、边界条件等因素。

import numpy as np
import matplotlib.pyplot as plt

# 模型参数
D = 0.1 # Tritium 扩散系数
dt = 0.01 # 时间步长
dx = 0.1 # 空间步长
T = 30 # 模拟总时间
L = 100 # 空间范围

# 空间和时间的离散化
Nx = int(L / dx)
Nt = int(T / dt)

# 初始化 Tritium 浓度场
C = np.zeros((Nt, Nx))
C[0, int(Nx / 2)] = 1095 # 设置初始条件

# 数值求解
for n in range(1, Nt):
  for i in range(1, Nx - 1):
    C[n, i] = C[n - 1, i] + D * dt / dx**2 * (C[n - 1, i + 1] - 2 * C[n - 1, i] + C[n - 1, i - 1])

# 可视化结果
plt.imshow(C, extent=[0, L, 0, T], aspect='auto', cmap='viridis')
plt.colorbar(label='Tritium 浓度')
plt.title('Tritium 污染扩散模拟')
plt.xlabel('空间')
plt.ylabel('时间')
plt.show()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
问题二
问题二的建模思路和公式:
1. 建立扩散模型:
继续使用扩散方程来描述 Tritium 冷却水的扩散过程。考虑 Tritium 浓度在海水中的时空演化。在此基础上,引入三次排放的时间阶段。

∂ C ∂ t = D ∇ 2 C \frac{\partial C}{\partial t} = D \nabla^2 C
∂t
∂C

 =D∇ 
2
 C

其中,C CC 是 Tritium 浓度,D DD 是 Tritium 的扩散系数,∇ 2 \nabla^2∇ 
2
 是 Laplace 算子,t tt 是时间。这个方程描述 Tritium 在海水中的扩散。

2. 引入洋流和海洋动力学:
考虑洋流模式和海洋动力学对 Tritium 扩散的影响。引入流速场 V ( x , y , t ) V(x, y, t)V(x,y,t),使 Tritium 浓度方程变为:

∂ C ∂ t = D ∇ 2 C − ∇ ⋅ ( V C ) \frac{\partial C}{\partial t} = D \nabla^2 C - \nabla \cdot (V C)
∂t
∂C

 =D∇ 
2
 C−∇⋅(VC)

这个方程考虑 Tritium 浓度的扩散和流动的影响。

3. 海底地形和水深:
引入海底地形高度 h ( x , y ) h(x, y)h(x,y) 和水深 H ( x , y ) H(x, y)H(x,y)。考虑海底地形和水深对 Tritium 浓度扩散的影响:

∂ C ∂ t = D ∇ 2 C − ∇ ⋅ ( V C ) + ∂ ∂ z ( D h ∂ C ∂ z ) \frac{\partial C}{\partial t} = D \nabla^2 C - \nabla \cdot (V C) + \frac{\partial}{\partial z}\left(D_h \frac{\partial C}{\partial z}\right)
∂t
∂C

 =D∇ 
2
 C−∇⋅(VC)+ 
∂z


 (D 
h

  
∂z
∂C

 )

其中,D h D_hD 
h

 是 Tritium 在垂直方向的扩散系数,z zz 表示水深方向。

4. 潮汐和季节波动:
引入潮汐和季节性的变化,将流速场和海底地形高度视为变化的函数。这可以通过引入适当的潮汐和季节波动函数来体现。

5. 数值求解和模拟:
使用数值方法对上述方程进行离散化,例如有限差分法。在每个时间步和空间点上,求解 Tritium 浓度的变化。

6. 估计中国领海污染时间:
根据模型的数值求解结果,估计 Tritium 污染可能到达中国领海的时间。考虑各种因素的影响,提供一个相对准确的估计。

7. 结果分析:
分析模型的结果,可视化 Tritium 浓度的时空分布。考虑洋流、水动力学、海底地形、水深、潮汐和季节波动等因素对 Tritium 污染扩散路径的影响。

其中,我们使用有限差分法进行数值求解。
当使用有限差分法求解 Tritium 污染扩散模型时,我们需要将偏微分方程离散化,以便进行数值求解。以下是求解 Tritium 污染扩散模型的有限差分法步骤:

1. 空间和时间离散化:
将空间和时间离散化,将求解区域划分为网格。假设空间方向为 x xx 和 y yy,时间方向为 t tt。设网格步长为 Δ x \Delta xΔx、Δ y \Delta yΔy 和 Δ t \Delta tΔt。

定义网格点位置:

空间网格点:( i , j ) (i, j)(i,j),i ii 表示 x xx 方向上的索引,j jj 表示 y yy 方向上的索引。
时间网格点:n nn,n nn 表示时间步数。
2. 离散化扩散方程:
使用中心差分法离散化扩散方程,考虑流动项和可能的垂直方向扩散项:

C i , j n + 1 − C i , j n Δ t = D ( C i + 1 , j n − 2 C i , j n + C i − 1 , j n Δ x 2 + C i , j + 1 n − 2 C i , j n + C i , j − 1 n Δ y 2 ) − ∇ ⋅ ( V C ) + ∂ ∂ z ( D h ∂ C ∂ z ) \frac{C_{i,j}^{n+1} - C_{i,j}^n}{\Delta t} = D \left(\frac{C_{i+1,j}^n - 2C_{i,j}^n + C_{i-1,j}^n}{\Delta x^2} + \frac{C_{i,j+1}^n - 2C_{i,j}^n + C_{i,j-1}^n}{\Delta y^2}\right) - \nabla \cdot (V C) + \frac{\partial}{\partial z}\left(D_h \frac{\partial C}{\partial z}\right)
Δt

i,j
n+1

 −C 
i,j
n

 

 =D( 
Δx 
2
 

i+1,j
n

 −2C 
i,j
n

 +C 
i−1,j
n

 

 + 
Δy 
2
 

i,j+1
n

 −2C 
i,j
n

 +C 
i,j−1
n

 

 )−∇⋅(VC)+ 
∂z


 (D 
h

  
∂z
∂C

 )

这里 C i , j n C_{i,j}^nC 
i,j
n

 表示 Tritium 浓度在网格点 ( i , j ) (i, j)(i,j) 处的值。

3. 边界条件:
设置合适的边界条件,考虑海域边界上 Tritium 浓度的变化。边界条件将直接影响 Tritium 的扩散路径。

4. 数值求解:
使用数值方法,例如迭代法,求解上述离散化后的方程。按照时间步和空间点进行迭代,更新 Tritium 浓度的值。

5. 结果分析:
分析模型的数值求解结果,可视化 Tritium 浓度的时空分布。通过观察结果,可以了解 Tritium 污染在海域中的传播情况,考虑洋流、水动力学、海底地形、水深等因素的影响。

import numpy as np
import matplotlib.pyplot as plt

# 模型参数
D = 0.1 # Tritium 扩散系数
Dh = 0.05 # Tritium 垂直方向扩散系数
Dt = 0.01 # 时间步长
Dx = Dy = 0.1 # 空间步长
T = 30 # 模拟总时间
Lx = Ly = 100 # 模拟空间范围

# 空间和时间的离散化
Nx = int(Lx / Dx)
Ny = int(Ly / Dy)
Nt = int(T / Dt)

# 流速场(示例:匀速流场)
Vx = np.ones((Nx, Ny)) * 0.1
Vy = np.zeros((Nx, Ny))

# 初始化 Tritium 浓度场
C = np.zeros((Nt, Nx, Ny))

# 数值求解
for n in range(1, Nt):
  for i in range(1, Nx - 1):
    for j in range(1, Ny - 1):
      # 离散化扩散方程
      diffusion_term_x = D * Dt / Dx**2 * (C[n-1, i+1, j] - 2*C[n-1, i, j] + C[n-1, i-1, j])
      diffusion_term_y = D * Dt / Dy**2 * (C[n-1, i, j+1] - 2*C[n-1, i, j] + C[n-1, i, j-1])
      advection_term = Dt * (Vx[i, j] * (C[n-1, i+1, j] - C[n-1, i-1, j]) + Vy[i, j] * (C[n-1, i, j+1] - C[n-1, i, j-1]))
      vertical_diffusion_term = Dt * Dh * ((C[n-1, i, j+1] - 2*C[n-1, i, j] + C[n-1, i, j-1]) / Dy**2)
       
      # 更新 Tritium 浓度
      C[n, i, j] = C[n-1, i, j] + diffusion_term_x + diffusion_term_y - advection_term + vertical_diffusion_term

# 可视化结果
fig, axs = plt.subplots(1, 2, figsize=(12, 5))

# Tritium 浓度的时空分布
cmap = axs[0].imshow(C[-1, :, :], extent=[0, Lx, 0, Ly], aspect='auto', cmap='viridis')
axs[0].set_title('Tritium 污染扩散时空分布')
axs[0].set_xlabel('空间 (x)')
axs[0].set_ylabel('空间 (y)')
fig.colorbar(cmap, ax=axs[0], label='Tritium 浓度')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
问题三
1. 数据处理和分析:
计算购买和不购买海鲜现在的人中,过去吃过和没吃过海鲜的比例:
方法: 利用表格中的数据进行计算。
具体步骤:
计算 P ( E ∣ B ) P(E|B)P(E∣B),P ( N ∣ B ) P(N|B)P(N∣B),P ( E ∣ N B ) P(E|NB)P(E∣NB),P ( N ∣ N B ) P(N|NB)P(N∣NB) 的比例。
使用以下公式:
P ( E ∣ B ) = Used to eat seafood and Eat seafood now Eat seafood now P(E|B) = \frac{\text{Used to eat seafood and Eat seafood now}}{\text{Eat seafood now}}
P(E∣B)= 
Eat seafood now
Used to eat seafood and Eat seafood now

 
制作柱状图或饼图,展示不同群体的态度分布:
方法: 使用数据可视化工具展示不同群体的态度分布。
具体步骤:
制作柱状图,展示购买和不购买海鲜现在的人中过去吃过和没吃过海鲜的比例。
使用饼图,显示整体态度的分布。
2. 购买海鲜态度变化分析:
计算购买海鲜现在的人中,过去吃过和没吃过海鲜的比例:
方法: 利用相同的比例计算方法,根据时间分段计算不同时期的态度变化。
具体步骤:
将时间分为不同的阶段,例如每个月或每季度。
对每个阶段计算 P ( E ∣ B ) P(E|B)P(E∣B),P ( N ∣ B ) P(N|B)P(N∣B),P ( E ∣ N B ) P(E|NB)P(E∣NB),P ( N ∣ N B ) P(N|NB)P(N∣NB)。
分析各个类别的趋势:
方法: 使用统计方法和数据可视化工具,如折线图。
具体步骤:
利用折线图展示各个类别在不同时间段内态度的变化趋势。
考察趋势是否表现出明显的上升、下降或波动。
3. 长期影响分析:
使用相关性分析方法:
建立数学模型:
方法: 使用Pearson相关系数进行相关性分析,了解不同因素与态度的关系。
具体步骤:
对每个可能影响态度的因素进行数据收集,例如地理位置、年龄、性别等。
计算各个因素与态度的Pearson相关系数,评估它们之间的线性相关性。
分析相关系数的方向和强度,判断哪些因素可能对态度产生显著影响。
使用时间序列分析方法:
建立数学模型:
方法: 使用ARIMA模型对时间序列进行分析。
具体步骤:
将态度数据按时间进行排序。
检查序列的平稳性,如果不平稳,进行差分操作。
选择适当的ARIMA模型,包括自回归阶数、差分阶数和移动平均阶数。
使用选定的ARIMA模型进行预测。
结果呈现和报告:
图表展示:

对于相关性分析,使用热力图展示各个因素之间的相关性。
对于时间序列分析,制作图表展示实际态度和预测态度的趋势。
报告撰写:

在报告中详细说明相关性分析的结果,包括相关系数矩阵和关键结论。
在报告中展示时间序列分析的结果,包括模型的准确性和对未来态度的预测。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 数据处理和分析
df['Eating_Seafood_Now'] = df['Used_to_eat_seafood'] & df['Eat_seafood_now']
P_E_B = df['Eating_Seafood_Now'].sum() / df['Eat_seafood_now'].sum()
P_N_B = (~df['Eating_Seafood_Now']).sum() / df['Eat_seafood_now'].sum()
P_E_NB = df['Eating_Seafood_Now'].sum() / (~df['Eat_seafood_now']).sum()
P_N_NB = (~df['Eating_Seafood_Now']).sum() / (~df['Eat_seafood_now']).sum()

# 制作柱状图
sns.barplot(x=['E|B', 'N|B', 'E|NB', 'N|NB'], y=[P_E_B, P_N_B, P_E_NB, P_N_NB])
plt.title('Attitude Distribution')
plt.ylabel('Proportion')
plt.show()

# 制作饼图
labels = ['E|B', 'N|B', 'E|NB', 'N|NB']
sizes = [P_E_B, P_N_B, P_E_NB, P_N_NB]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.axis('equal')
plt.title('Attitude Distribution')
plt.show()

# 购买海鲜态度变化分析
df['Date'] = pd.to_datetime(df['Date'])
df['Month'] = df['Date'].dt.month
attitude_changes = df.groupby('Month')['Eating_Seafood_Now'].mean()
plt.plot(attitude_changes.index, attitude_changes.values, marker='o')
plt.title('Attitude Changes Over Time')
plt.xlabel('Month')
plt.ylabel('Proportion')
plt.show()

# 长期影响分析 - 相关性分析
correlation_matrix = df.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=.5)
plt.title('Correlation Matrix')
plt.show()

# 长期影响分析 - 时间序列分析
time_series_data = df[['Date', 'Attitude']].set_index('Date')
p, d, q = 1, 1, 1 # 选择适当的ARIMA模型参数
model = ARIMA(time_series_data['Attitude'], order=(p, d, q))
fit_model = model.fit()
forecast = fit_model.predict(start=len(time_series_data), end=len(time_series_data) + n_steps - 1, typ='levels')

# 结果展示
plt.figure(figsize=(12, 6))

# 实际态度
plt.plot(time_series_data.index, time_series_data['Attitude'], label='Actual Attitude', color='blue')

# 预测态度
plt.plot(pd.date_range(start=time_series_data.index[-1], #见完整版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
问题四
1. 模型建立:
使用 Sigmoid 函数进行非线性二元分类:
思路: 利用 Sigmoid 函数对海域是否受到污染进行建模,将输入特征的线性组合映射到 [0, 1] 范围,表示概率。

公式: Sigmoid 函数表示为
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}}
σ(z)= 
1+e 
−z
 
1

 
,其中 z zz 是输入的线性组合。

2. 模型参数:
输入特征选择:
关键因素: 污染源位置、海洋环流、水深、季节变化等可能影响海域污染的因素将构成模型的输入。
非线性转换:
Sigmoid 函数应用: 使用 Sigmoid 函数对输入进行非线性转换,将其映射到 [0, 1] 范围。
3. 模型建立:
使用 Sigmoid 函数求解非线性问题:
思路: 问题四的目标是判断是否所有世界的海域在30年内会受到污染,属于二元分类问题。Sigmoid 函数是一种常用的二元分类激活函数,能够将输入映射到 [0, 1] 范围内,表示概率。

公式: Sigmoid 函数定义为
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}}
σ(z)= 
1+e 
−z
 
1

 
其中 z zz 是输入的线性组合。

4. 模型参数:
输入特征:
选择可能影响海域污染的因素: 污染源位置、海洋环流、水深、季节变化等可能是关键因素。这些特征将构成模型的输入。
非线性转换:
Sigmoid 函数应用: 将输入特征的线性组合通过 Sigmoid 函数进行非线性转换,将其映射到 [0, 1] 范围内。
5. 训练模型:
数据集:
历史污染数据: 使用已知的历史污染数据构建训练集,标记海域是否受到过污染。这些标记将成为模型的目标输出。
损失函数:
二元交叉熵: 选择二元交叉熵损失函数,适用于二元分类问题。该损失函数能够衡量模型输出与实际标签之间的差异。
优化算法:
梯度下降: 使用梯度下降等优化算法,通过调整模型参数,使损失函数最小化。这一过程将使模型更好地适应训练数据。
————————————————
版权声明:本文为CSDN博主「数学建模小secret」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Mmmath_secret/article/details/135642101

同店推荐

包含文件 · 7 · 384.7 KB

  • 01_问题一.py 784.0 B
  • 02_问题四思路二.py 2.6 KB
  • 03_问题四.py 2.5 KB
  • 04_问题三.py 2.3 KB
  • 05_A题解题思路秘籍+代码.docx 32.2 KB
  • 06_问题二.py 1.9 KB
  • 07_A题解题思路秘籍+代码.pdf 342.4 KB
支付金额 ¥23.60