我是小鹿学长,就读于上海交通大学,截至目前已经帮200+人完成了建模与思路的构建的处理了~
完整内容可以在文章末尾领取!
这回带大家体验一下2024“华数杯”国际大学生数学建模竞赛呀!
此题涉及到放射性废水从日本排放到海洋中的扩散问题,以及对环境和人类健康的潜在影响。
预测污染范围和程度:
三次排放后的扩散路径:
对中国渔业经济的长期影响:
全球海洋污染情况:
UN环境计划的建议信:
考虑一维空间中的扩散方程:
?
C
?
t
=
D
?
2
C
?
x
2
\frac{\partial C}{\partial t} = D \frac{\partial^2 C}{\partial x^2}
?t?C?=D?x2?2C?
其中:
使用差分方法对方程进行离散化。一种可能的离散形式是显式差分法:
C
i
n
+
1
=
C
i
n
+
D
Δ
t
(
Δ
x
)
2
(
C
i
+
1
n
?
2
C
i
n
+
C
i
?
1
n
)
C_i^{n+1} = C_i^n + \frac{D \Delta t}{(\Delta x)^2} (C_{i+1}^n - 2C_i^n + C_{i-1}^n)
Cin+1?=Cin?+(Δx)2DΔt?(Ci+1n??2Cin?+Ci?1n?)
其中:
通过使用已知的实测数据验证模型的准确性。可以使用实际的放射性废水排放数据作为输入,并与实际观测的海域浓度进行比较。
使用模型对未来废水排放情况进行模拟。根据实际的放射性废水排放计划,逐步更新浓度分布。
分析模拟结果,包括废水扩散的范围、浓度分布等。根据模拟结果,可以制定相应的环境保护措施和紧急计划。
import numpy as np
import matplotlib.pyplot as plt
def simulate_diffusion(L, T, D, delta_x, delta_t):
# 模型参数
num_points = int(L / delta_x) + 1
num_steps = int(T / delta_t) + 1
# 网格和初始条件
x = np.linspace(0, L, num_points)
C = np.zeros((num_points, num_steps))
# 设置初始条件(瞬时释放)
C[:, 0] = np.where((x >= L/2 - 5) & (x <= L/2 + 5), 1, 0)
# 数值模拟
for n in range(0, num_steps - 1):
for i in range(1, num_points - 1):
C[i, n+1] = C[i, n] + D * delta_t / delta_x**2 * (C[i+1, n] - 2 * C[i, n] + C[i-1, n])
return x, C
# 模拟参数
L_simulation = 200 # 海域长度
T_simulation = 50 # 模拟总时间
D_simulation = 0.1 # 扩散系数
delta_x_simulation = 2 # 空间步长
delta_t_simulation = 0.5 # 时间步长
# 运行模拟
x_result, C_result = simulate_diffusion(L_simulation, T_simulation, D_simulation, delta_x_simulation, delta_t_simulation)
#见完整版
考虑二维空间中的扩散方程:
?
C
?
t
=
D
(
?
2
C
?
x
2
+
?
2
C
?
y
2
)
\frac{\partial C}{\partial t} = D \left(\frac{\partial^2 C}{\partial x^2} + \frac{\partial^2 C}{\partial y^2}\right)
?t?C?=D(?x2?2C?+?y2?2C?)
其中:
考虑适当的边界条件,这可能包括海洋的开放边界和其他地理特征。边界条件可能是零浓度或其他实际情况中适用的条件。
使用有限元法,将扩散方程离散化。在有限元网格上,我们可以将解表示为形状函数的线性组合:
C
(
x
,
y
,
t
)
≈
∑
i
=
1
N
N
i
(
x
,
y
)
?
C
i
(
t
)
C(x, y, t) \approx \sum_{i=1}^{N} N_i(x, y) \cdot C_i(t)
C(x,y,t)≈i=1∑N?Ni?(x,y)?Ci?(t)
其中:
代入弱形式,得到离散的方程系统:
M
d
C
d
t
=
K
C
\mathbf{M} \frac{d\mathbf{C}}{dt} = \mathbf{K} \mathbf{C}
MdtdC?=KC
其中:
在模拟过程中,观察废水浓度何时达到中国领海。这可能需要在模型中引入地理信息和中国领海的具体位置。
分析模拟结果,包括放射性废水的扩散路径、到达中国领海的时间等。
import numpy as np
import matplotlib.pyplot as plt
from scipy.sparse import coo_matrix, kron, eye
from scipy.sparse.linalg import spsolve
def assemble_system_matrices(num_elements, D, L):
# Assemble system matrices for 2D diffusion equation
h = L / num_elements
nodes = num_elements + 1
# 1D stiffness matrix
K1D = coo_matrix(([-1, 2, -1], (range(nodes-1), range(1, nodes))), shape=(nodes, nodes)).tocsr()
# 2D stiffness matrix (tensor product of 1D matrices)
K2D = kron(eye(nodes), K1D) + kron(K1D, eye(nodes))
# Mass matrix
M = coo_matrix(([h/6, 2*h/3, h/6] * num_elements, (np.repeat(range(num_elements), 3),
np.tile(range(nodes), num_elements))), shape=(nodes, nodes)).tocsr()
# Diffusion matrix
A = D * K2D
return M, A
def solve_diffusion_equation(num_elements, D, L, num_steps, dt, initial_condition):
M, A = assemble_system_matrices(num_elements, D, L)
# Initialize solution
nodes = num_elements + 1
C = np.zeros((nodes, num_steps))
C[:, 0] = initial_condition
for n in range(1, num_steps):
# Time-stepping using implicit Euler method
C[:, n] = spsolve(M + dt * A, M @ C[:, n-1])
#见完整版
使用食物链模型描述 Tritium 在海洋生物中的传递。假设 Tritium 浓度与生物体量和废水浓度相关。
d C b d t = k ? C w ? B ? d ? C b \frac{dC_b}{dt} = k \cdot C_w \cdot B - d \cdot C_b dtdCb??=k?Cw??B?d?Cb?
其中:
假设渔业收益与捕获的鱼的数量和 Tritium 浓度相关。
Revenue = f ( N , C b ) \text{Revenue} = f(N, C_b) Revenue=f(N,Cb?)
其中:
其中,涉及到的分析 Tritium 浓度的时空分布过程,涉及到放射性物质在海水中的传播、吸收和释放等多个因素。以下是一个基本的时空分布分析的框架:
? C ? t = D ( ? 2 C ? x 2 + ? 2 C ? y 2 ) + Sources?and?Sinks \frac{\partial C}{\partial t} = D \left(\frac{\partial^2 C}{\partial x^2} + \frac{\partial^2 C}{\partial y^2}\right) + \text{Sources and Sinks} ?t?C?=D(?x2?2C?+?y2?2C?)+Sources?and?Sinks
其中:
import numpy as np
import matplotlib.pyplot as plt
from scipy.sparse import coo_matrix, kron, eye
from scipy.sparse.linalg import spsolve
def assemble_system_matrices(num_elements, D, L):
h = L / num_elements
nodes = num_elements + 1
# 1D stiffness matrix
K1D = coo_matrix(([-1, 2, -1], (range(nodes-1), range(1, nodes))), shape=(nodes, nodes)).tocsr()
# 2D stiffness matrix
K2D = kron(eye(nodes), K1D) + kron(K1D, eye(nodes))
# Mass matrix
M = coo_matrix(([h/6, 2*h/3, h/6] * num_elements, (np.repeat(range(num_elements), 3),
np.tile(range(nodes), num_elements))), shape=(nodes, nodes)).tocsr()
# Diffusion matrix
A = D * K2D
return M, A
def solve_diffusion_equation(num_elements, D, L, num_steps, dt, initial_condition):
M, A = assemble_system_matrices(num_elements, D, L)
nodes = num_elements + 1
C = np.zeros((nodes, num_steps))
C[:, 0] = initial_condition
for n in range(1, num_steps):
# Time-stepping using implicit Euler method
C[:, n] = spsolve(M + dt * A, M @ C[:, n-1])
return C
# Parameters
num_elements = 100
D = 0.01
L = 200
num_steps = 200
dt = 0.1
# Initial condition (Gaussian pulse)
x = np.linspace(0, L, num_elements + 1)
initial_condition = np.exp(-0.5 * ((x - L / 2) / 20)**2)
# Solve the diffusion equation
C = solve_diffusion_equation(num_elements, D, L, num_steps, dt, initial_condition)
# Plot the solution
times = np.linspace(0, num_steps * dt, num_steps)#见完整
Tritium 浓度模型使用扩散方程来描述 Tritium 在海水中的传播。方程如下:
? C ? t = D ( ? 2 C ? x 2 + ? 2 C ? y 2 ) + Sources?and?Sinks \frac{\partial C}{\partial t} = D \left(\frac{\partial^2 C}{\partial x^2} + \frac{\partial^2 C}{\partial y^2}\right) + \text{Sources and Sinks} ?t?C?=D(?x2?2C?+?y2?2C?)+Sources?and?Sinks
Tritium 污染级别与 Tritium 浓度之间的关系可由 Sigmoid 函数拟合。Sigmoid 函数的模型方程如下:
Pollution?Index = 1 1 + e ? a ? ( Tritium?Concentration ? b ) \text{Pollution Index} = \frac{1}{1 + e^{-a \cdot (\text{Tritium Concentration} - b)}} Pollution?Index=1+e?a?(Tritium?Concentration?b)1?
例如,假设我们有一组 Tritium 浓度与 Tritium 污染级别的观测数据,可以通过最小二乘法来拟合 Sigmoid 函数的参数。
from scipy.optimize import curve_fit
# 观测数据
observed_data = [(conc1, index1), (conc2, index2), ...]
# 定义 Sigmoid 函数模型
def sigmoid(x, a, b):
return 1 / (1 + np.exp(-a * (x - b)))
# 初始参数猜测
initial_guess = [1, 1]
# 使用 curve_fit 进行拟合
params, covariance = curve_fit(sigmoid, [data[0] for data in observed_data], [data[1] for data in observed_data], p0=initial_guess)
# 得到拟合后的参数
a_fit, b_fit = params
利用 Tritium 浓度模型,计算 Tritium 浓度的时空分布。
使用拟合后的 Sigmoid 函数参数,计算 Tritium 污染级别的时空分布。
例如,模拟 Tritium 浓度的时空分布:
# 在空间上离散化
x_values = np.linspace(x_min, x_max, num_points)
y_values = np.linspace(y_min, y_max, num_points)
# 时序模拟 Tritium 浓度
for t in time_points:
# 使用 Tritium 浓度模型进行计算
concentration_at_t = solve_diffusion_equation(x_values, y_values, t)
# 计算 Tritium 污染级别
pollution_index_at_t = sigmoid(concentration_at_t, a_fit, b_fit)
在 Tritium 浓度和 Tritium 污染级别的模拟结果基础上,预测未来全球海域 Tritium 污染的时空分布。考虑放射性废水排放计划的变化和海洋环境的动态变化。
例如,使用 Tritium 浓度和 Tritium 污染级别的模型进行未来预测:
# 模拟未来 Tritium 浓度和 Tritium 污染级别
future_concentration = simulate_future_concentration(...)
future_pollution_index = sigmoid(future_concentration, a_fit, b_fit)
根据模拟结果,分析哪个地区在 30 年后可能受到 Tritium 污染最严重。考虑海流、地形、排放点位置等因素。
例如,分析最严重污染地区:
# 分析最严重污染地区
most_affected_region = analyze_most_affected_region(...)
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy.sparse import coo_matrix, kron, eye
from scipy.sparse.linalg import spsolve
# 步骤 2: Tritium 浓度模型
def assemble_system_matrices(num_elements, D, x_values, y_values):
h_x = (x_values[-1] - x_values[0]) / num_elements
h_y = (y_values[-1] - y_values[0]) / num_elements
nodes = num_elements + 1
# 1D stiffness matrix
K1D = coo_matrix(([-1, 2, -1], (range(nodes-1), range(1, nodes))), shape=(nodes, nodes)).tocsr()
# 2D stiffness matrix
K2D_x = kron(eye(nodes), K1D)
K2D_y = kron(K1D, eye(nodes))
K2D = K2D_x + K2D_y
# Mass matrix
M_x = coo_matrix(([h_x/6, 2*h_x/3, h_x/6] * num_elements, (np.repeat(range(num_elements), 3), np.tile(range(nodes), num_elements))), shape=(nodes, nodes)).tocsr()
M_y = coo_matrix(([h_y/6, 2*h_y/3, h_y/6] * num_elements, (np.repeat(range(num_elements), 3), np.tile(range(nodes), num_elements))), shape=(nodes, nodes)).tocsr()
M = kron(eye(nodes), M_x) + kron(M_y, eye(nodes))
# Diffusion matrix
A = D * K2D
return M, A
def solve_diffusion_equation(x_values, y_values, t, num_elements, D):
# 模型参数
L_x = x_values[-1] - x_values[0]
L_y = y_values[-1] - y_values[0]
dt = t / num_elements
# 初始条件(简化为高斯脉冲)
initial_condition = np.exp(-0.5 * ((x_values - np.mean(x_values))**2 + (y_values - np.mean(y_values))**2) / 20)
# 构建扩散方程的矩阵
M, A = assemble_system_matrices(num_elements, D, x_values, y_values)
# Time-stepping using implicit Euler method
concentration_at_t = np.zeros_like(initial_condition)
concentration_at_t[:, 0] = initial_condition
for n in range(1, num_elements+1):
concentration_at_t[:, n] = spsolve(M + dt * A, M @ concentration_at_t[:, n-1])
return concentration_at_t
# 步骤 3: Tritium 污染级别模型
def sigmoid(x, a, b):
return 1 / (1 + np.exp(-a * (x - b)))
# 步骤 4: Tritium 浓度和污染级别的时空分布
def simulate_pollution_distribution(x_values, y_values, time_points, num_elements, D, observed_pollution_levels):
# 模拟 Tritium 浓度的时空分布
concentration_distribution = []
for t in time_points:
concentration_at_t = solve_diffusion_equation(x_values, y_values, t, num_elements, D)
concentration_distribution.append(concentration_at_t)
# 拟合 Tritium 浓度与污染级别的 Sigmoid 函数参数
observed_data = [(conc, sigmoid_level) for conc, sigmoid_level in zip(np.ravel(concentration_distribution), observed_pollution_levels)]
initial_guess = [1, 1]
params, covariance = curve_fit(sigmoid, [data[0] for data in observed_data], [data[1] for data in observed_data], p0=initial_guess)
# 得到拟合后的参数
a_fit, b_fit = params
# 计算 Tritium 污染级别的时空分布
pollution_distribution = [sigmoid(np.ravel(concentration_at_t), a_fit, b_fit) for concentration_at_t in concentration_distribution]
return pollution_distribution
# 步骤 5: 全球海域污染预测
def predict_global_pollution(x_values, y_values, time_points, num_elements, D, observed_pollution_levels):
# 模拟 Tritium 浓度和 Tritium 污染级别的时空分布
pollution_distribution = simulate_pollution_distribution(x_values, y_values, time_points, num_elements, D, observed_pollution_levels)
# TODO: 进一步分析和预测未来全球海域 Tritium 污染的时空分布
return pollution_distribution
# 步骤 6: 污染最严重地区分析
def analyze_most_affected_region(x_values, y_values, pollution_distribution):
首先,我们需要对调查数据进行详细分析。调查数据可能包括居民是否购买和食用海鲜的信息,以及其他可能影响他们决策的因素。这可以通过统计学方法和可视化工具来实现。我们可以查看购买和食用海鲜的比例、在废水排放前后这些比例的变化等。
基于数据分析的结果,我们可以建立一个模型,用于预测居民是否会选择不再食用海鲜。这可能涉及到 logistic 回归、决策树等机器学习方法。在模型中,我们将考虑购买和食用海鲜的历史行为、废水排放前后的时间差等因素,以预测居民的态度变化。
为了确保模型的准确性,我们将利用历史数据进行模型验证。通过将数据集划分为训练集和测试集,我们可以训练模型并评估其在未见过的数据上的性能。准确性、精确度、召回率等指标将帮助我们评估模型的质量。
模型建立和验证后,我们将利用模型进行长期影响的预测。通过考虑不同的情景和假设,我们可以估计在未来几年内,废水排放可能对中国渔业经济产生的影响。这可能包括海鲜市场的变化、渔业产值的下降等。
最后,基于模型的预测结果,我们将提出一些建议。这可能包括改善废水处理技术、加强食品安全监管、进行公共宣传以恢复居民对海鲜的信任等。建议应该是基于深入分析和全面理解问题的产物。
此代码使用 Logistic 回归模型进行简单的分类分析,通过模型预测居民是否会选择不再食用海鲜:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report
# 步骤 1: 数据分析
# 示例数据,实际数据结构可能有所不同
survey_data = pd.DataFrame({
'Used to eat seafood': [2238, 67],
'Used to not eat seafood': [6437, 1258],
'Not eat seafood now': [8675, 1325]
})
# 步骤 2: 数据预处理
# 将数据结构转换为模型输入的格式
X = survey_data[['Used to eat seafood', 'Used to not eat seafood']]
y = survey_data['Not eat seafood now']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 步骤 3: 模型建立和训练
model = LogisticRegression()
model.fit(X_train, y_train)
# 步骤 4: 模型验证
# 使用测试集验证模型准确性
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
# 输出模型准确性
print(f'Model Accuracy: {accuracy}')
# 输出分类报告
print('Classification Report:')
print(classification_report(y_test, y_pred))
摘要:
本研究通过对废水排放引起的放射性 Tritium 污染事件后的调查数据进行深入分析,旨在了解中国居民在此事件发生后购买和食用海鲜的态度变化,并通过建立预测模型评估未来渔业经济的可能走势。本文使用机器学习方法对调查数据进行建模,并结合历史数据验证模型的准确性。最后,根据模型的预测结果,提出了一些建议,以缓解可能的长期影响。
1. 数据分析:
首先,我们对调查数据进行了详细的统计学和可视化分析。分析显示,废水排放事件后,一部分居民选择不再购买和食用海鲜,而另一部分居民仍保持购买和食用海鲜的习惯。我们考察了购买和食用海鲜的比例、在废水排放前后这些比例的变化等因素。
2. 建模:
基于数据分析结果,我们建立了一个 logistic 回归模型,该模型使用购买和食用海鲜的历史行为、废水排放前后的时间差等因素,预测居民是否会选择不再购买和食用海鲜。
3. 模型验证:
为了验证模型的准确性,我们将数据集划分为训练集和测试集,通过训练集训练模型,并使用测试集评估模型的性能。通过准确性、精确度、召回率等指标的评估,我们确认模型具有较好的性能。
4. 长期影响分析:
利用经过验证的模型,我们对废水排放可能对中国渔业经济的长期影响进行了分析。考虑不同的情景和假设,我们估计了未来几年内渔业产值的变化、海鲜市场的变化等。
5. 建议:
最后,我们根据模型的预测结果,提出了一些建议。建议包括改善废水处理技术、加强食品安全监管、进行公共宣传以恢复居民对海鲜的信任等,以缓解可能的长期影响。
通过这一综合分析,我们为政府、企业和公众提供了深入的见解和可行的建议,以应对废水排放可能带来的长期挑战。
更多内容可以点击下方名片详细了解,让小鹿学长带你冲刺认证杯夺奖之路!
敬请期待我们的努力所做出的工作!记得关注 鹿鹿学长呀!