大家好呀,数维杯今天早上开赛了,在这里带来初步的选题建议及思路。
目前我正在写A题完整论文,后续还会持续更新B题哈,本文章只是图文版讲解,视频版讲解移步:
2023数维杯数学建模选题建议及思路、代码讲解_哔哩哔哩_bilibili
首先是主基调:
本次总体难度上A<B,
A主要是建立有机污染物的对流、弥散及吸附作用理论模型之后,进行具体的有限差分法进行数值模拟,也就是给出离散化方程后进行具体迭代求解。
B题则主要是进行列车运行的程序模拟,具体理论方程已经给定,我们需要做的是根据题目给出的路况和电机数据进行实际模拟,具体模拟过程较为复杂,不建议编程能力不强的人选择。
总之,建议小白队伍选择A题。
我预计会在今晚到明早更新完毕A题,B预计明晚前尽量更新,看我具体进度吧。
A题(污染物对流弥散吸附问题)
问题1 通过查阅相关文献和资料,分析并建立河流-地下水系统中有机污染物的对流、弥散及吸附作用的数学模型 。
没什么好说的,直接搜集文献确定方程即可:
在河流-地下水系统中,有机污染物的迁移和转化可以通过对流和弥散的数学模型来描述。
对流-弥散方程:
∂C/∂t = -u*∂C/∂x - v*∂C/∂z + D*(∂²C/∂x² + ∂²C/∂z²)
其中:
C是有机污染物的浓度,
t是时间,
x和z是空间坐标,
u是孔隙流速度,表示地下水在孔隙中的流动速度,
v是地下水渗流速度,表示地下水在地下水层中的整体流动速度,
D是弥散系数,表示有机污染物在孔隙中的弥散速率。
按照这样的方法去确定理论方程即可。
重点是二三问:
问题2 试利用下面介绍的内容和表中试验参数以及数据依据数学模型研究某有机污染物在河流-地下水系统中的迁移转化机理。
获得参数以及初始条件等后:
要使用数值方法进行求解,例如有限差分法或有限元法。通过模拟计算,研究有机污染物在河流-地下水系统中的迁移转化机理,如浓度随时间和空间的变化、扩散范围和速率等。
本质上就是有限差分后迭代求解的数值方法。
我目前大致的求解方式:
为了使用数值方法求解对流-弥散方程,我们可以采用有限差分法进行离散化。下面是一个简单的离散化方法示例,假设我们在空间上使用均匀网格进行离散化,并采用显式时间步进方法:
1. 空间离散化:
将空间坐标x和z分别离散为N个网格点,步长分别为Δx和Δz。定义C(i,j)为时间步t_j时刻在位置x_i和z_i处的浓度。
2. 时间离散化:
将时间t离散为M个时间步,步长为Δt。定义C(i,j)为时间步t_j时刻在位置x_i和z_i处的浓度。
3. 离散化方程:
对对流-弥散方程中的各项进行离散化替代,得到以下离散方程:
(为保证限量,略)
我目前编写的代码:
为了保证限量,不全展示了。
% 定义参数
u = 38.67; % 平均孔隙流速
v = 5.01; % 地下水渗流流速
k = 6.32; % 渗透系数
D = 0.38; % 弥散系数
rho = 1.67; % 含水层样品的密度
n = 0.375; % 孔隙度
dt = 0.5; % 时间步长
dx = 1.0; % 空间步长
dz = 1.0; % 空间步长
% 定义网格大小和时间步数
N = 100; % 河流-地下水系统网格的长度
M = 100; % 总时间步数
% 初始化浓度矩阵
C = zeros(N, N);
C(:, 1) = 0.5; % 初始时刻浓度为0.5 mg/L
% 迭代求解
for j = 2:M
for i = 2:N-1
% 计算对流、弥散项
convective_term = u * dt / dx * (C(i-1, j-1) - C(i, j-1));
if j == 2
总之思路就是如此,我目前还在编写代码去进行具体的数值模拟,预计今晚前更新完毕,之后我会写完整的成品论文哈。
B题(节能列车运行控制优化策略)
你如何通过建模方法编写程序以获得列车运行过程的速度-距离曲线、牵引 制动力-距离曲线、时间-距离曲线与能量消耗-距离曲线?程序的运行时间是多 长?需要获取列车以最短时间到达站台B、在最短运行时间上分别增加10s、20s、50s、150s、300s到达站台B总共六组曲线
本质上其实就是列车运行的模拟程序
初始条件和阻力方程等是题目已经给定的。
难点是模拟的时候,要考虑路况信息和电机参数:
我目前也在编写代码:
% 列车参数
mass = 176.3 * 1000; % 质量(kg)
rotationalInertiaFactor = 1.08; % 旋转部件惯性的旋转质量因数
maximumTractionForce = 310000; % 最大牵引力(N)
maximumBrakingForce = 760000; % 最大制动力(N)
distance = 5144.7; % 距离(m)
velocityLimit = 100 * 1000 / 3600; % 速度上限(m/s)
% Davis阻力方程参数
a = 2.0895;
b = 0.0098;
c = 0.006;
% 不同运行时间
runTimes = [0, 10, 20, 50, 150, 300]; % 在最短时间上增加的时间(s)
numRuns = length(runTimes);
% 初始化结果变量
velocityDistance = zeros(numRuns, 2);
tractionBrakeDistance = zeros(numRuns, 2);
timeDistance = zeros(numRuns, 2);
energyDistance = zeros(numRuns, 2);
% 计算结果
for i = 1:numRuns
% 初始条件
t = 0; % 时间(s)
x = 0; % 距离(m)
v = 0; % 速度(m/s)
tractionForce = 0; % 牵引力(N)
brakeForce = 0; % 制动力(N)
energyConsumption = 0; % 能量消耗(J)
% 运行直到到达站台B
while x < distance
% 计算阻力
resistance = a + b * v + c * v^2;
% 计算加速度
if tractionForce < maximumTractionForce && v < velocityLimit
为保证限量中间就略去了,总之最后是给出曲线图:
% 绘制能量消耗-距离曲线
figure;
plot(energyDistance(:, 2), energyDistance(:, 1));
xlabel('距离(m)');
ylabel('能量消耗(J)');
title('能量消耗-距离曲线');
% 输出运行时间
runTime = sum(runTimes) + timeDistance(end, 1);
fprintf('程序的运行时间为%.2f秒。\n', runTime);
OK,A题B题大致的思路如上。
建议小白队伍以及两道题都不是很会做的队伍选择A题即可,比B题简单很多。
OK以上只是比较简略的图文版讲解,我目前正在写完整论文,视频版讲解以及后续完整论文的预定请点击下方我的个人卡片哈↓: