首页 / 资讯中心 / 文章详情

抢渡长江数学建模:流场路径优化与Python数值复现

抢渡长江数学建模:流场路径优化与Python数值复现 ★ FEATURED ARTICLE
简介围绕2003年全国大学生数学建模竞赛D题「抢渡长江」的参考论文面向备战数学建模竞赛的选手、指导教师及想掌握最优控制建模思路的学习者重点解决恒定与分段水流条件下如何选择游泳角度θ(t)使渡江总时间最短的问题。压缩包内共1个doc文档约124KB内容为命题人给出的参考答案便于直接对照题意梳理建模脉络。文档从运动方程出发论证最优路径为直线推导斜率z与到达时间T的关系并由二次方程求根及可行性条件筛选合理解结合H1160m、L1000m、v1.89m/s等数据给出角度、速度与用时的示例计算。文档还讨论垂直游动所需速度阈值以及将水流分为三段后动态调整方向、用枚举表逼近最短总时间的做法。已有777人学习适合用来复盘完整推导、核对数值结果与理解复杂水流下的建模取舍。1. 抢渡长江这道 D 题参考论文真正值钱的是哪几页翻开 2003 年全国赛 D 题的参考论文多数人直奔公式页把最优路线那条解析表达式抄进笔记就合上了。这道题问的是渡江选手在水流里怎么选方向、能不能到岸、游得更快是不是成绩就一定更好本质是带流场的路径优化数学建模里最典型的“路线 时间”型问题。抄完公式你会发现换一道题还是不会做因为参考论文里真正值钱的东西不在那几行前面那张假设表决定了模型能走多远中间那段流速剖面的处理决定了结论对不对最后用实测成绩做检验的那一章决定了这篇论文能走到什么位置。下面按这三块拆把能抄作业的代码、要调的参数和容易翻车的地方摆出来。2. 把渡江问题翻译成可计算的模型坐标系、流场与三个决策变量拿到题目先别急着写公式。这道题的文字描述里塞了大量背景真正有用的信息只有三类江面几何宽度、起终点位置、水流分布沿江宽方向的流速剖面数据、选手能力相对水的游速。把这三类信息翻译成符号剩下的就是标准化操作。2.1 坐标系先定死把二维问题压成一维积分取出发点为原点x 轴沿江岸指向下游为正y 轴垂直岸线指向对岸为正江宽记作 L终点坐标记作 (X_B, L)。选手位置 (x(t), y(t))相对水的游速为 v游动方向与 x 轴正向的夹角为 θ。运动学方程只有两行dx/dt v·cosθ u(y) dy/dt v·sinθ第一行里 u(y) 是水流沿 x 方向的速度它把选手往下游推第二行是横渡分量只有它能把人送到对岸。到这里大部分人会直接上二维数值积分然后卡在“怎么搜路线”上。正确做法是换自变量因为 u 只随 y 变化把 y 当自变量把两式相除得到dx/dy (v·cosθ u(y)) / (v·sinθ) T ∫₀ᴸ dy / (v·sinθ(y))二维轨迹问题就此变成一个一维积分问题给定一条 θ 随 y 变化的策略横渡时间是一个一维积分落点是一个一维积分约束只有一条 x(L) X_B。这是整篇参考论文里最关键的化简缺了这一步后面的数值结果很难解释清楚。提示写参考论文时把这段推导单独成节并在符号表里明确 θ 的零点与正方向。角度定义含混是这道题最常见的失分点评审看路线图时第一眼就是判断角度是不是从正确的轴量起。对应的假设表也是在这时候列的。下面这张表是这道题常见的假设及其代价写论文时可以直接照着改假设内容放松后要改什么H1选手相对水的速度大小恒定方向可任意调整引入体力衰减 v(t)模型变成时变最优控制H2水流只有沿岸方向分量无横向分量加入 v_y(y)横渡时间不再与路线解耦H3流场沿江宽方向一维分布沿程不变变成 u(x,y)需要二维流场数据H4选手入水点与出水点固定不允许沿岸陆上移动允许陆上移动后要加入走行速度与切换点优化H5忽略出发与到岸的加速过程加入加减速段短距离赛程下影响不可忽略H2 和 H4 是最值得在论文里讨论的两条。真实渡江比赛里选手往往会先贴着岸边游一段再斜穿原因就是岸边流速低如果你的模型不允许沿岸方向“免费”前进就解释不了这个现象。2.2 流速剖面怎么拟合分段线性、抛物线还是直接插值题目给的是一张测点数据表若干个横向位置 y_i 对应的流速 u_i通常呈现“两岸小、江心大”的形状。处理方式有三种选择取决于你后面要做什么。第一种是抛物线拟合 u(y) 4·u_max·y·(L−y)/L²。好处是解析可积、形式漂亮、参数只有一个 u_max坏处是它强制岸边流速为零而实测数据里岸边往往还有一个不小的残余流速另外真实剖面的峰值位置通常不在正中间抛物线拟合会把峰值锁死在 L/2。第二种是分段线性插值。保形、不会插出负流速、能忠实反映岸边低速带的宽度缺点是导数不连续做梯度类优化时目标函数会有轻微抖动。实际做这道题我一般用这一种因为“岸边低速带有多宽”恰恰是决定最优路线的关键量不能被一个光滑函数抹平。第三种是分段三次样条。光滑性最好但容易在数据稀疏处过冲出现物理上不可能的负流速或者双峰。要用的话必须做单调性检查。不管选哪种落笔前先算两个派生量峰值流速 u_max 和低速带宽度 δ定义为 u 0.3·u_max 的横向范围。这两个数直接决定后面可行性判据的松紧也是灵敏度分析里最该扰动的参数。import numpy as np # 示意数据第一列是归一化横向位置 y/L第二列是流速 (m/s) # 实际做题时替换成题目给的测点表 PROFILE np.array([ [0.00, 0.35], [0.10, 0.90], [0.25, 1.35], [0.50, 1.70], [0.75, 1.45], [0.90, 0.95], [1.00, 0.30], ]) def make_u(L): yn PROFILE[:, 0] un PROFILE[:, 1] def u(y): # np.interp 默认做线性插值超出范围时钳制到端点值 return np.interp(np.asarray(y) / L, yn, un) return u L 1000.0 # 江宽示意值 u make_u(L) print(峰值流速, PROFILE[:, 1].max(), 低速带宽度占比, PROFILE[PROFILE[:, 1] 0.3 * PROFILE[:, 1].max()][:, 0])这段代码只做一件事把测点表包装成一个可调用的函数 u(y)后面所有积分和优化都复用它。注意 np.interp 在区间外做的是端点钳制而不是外推这正是我们要的行为避免优化过程中把 y 推到负数时拿到荒谬的流速。2.3 可行性判据什么速度下根本到不了终点在动手写数值优化之前先用均匀流情形推一个解析判据这个判据能解释后面很多现象。假设 u 为常数、θ 也恒定时不变系统的最优控制就是常数控制从 (0,0) 到 (X_B, L) 要求(v·cosθ u)·T X_B v·sinθ·T L两式相除记 k X_B / Lcosθ − k·sinθ −u/v左边是一个振幅为 √(1k²) 的余弦型表达式因此有解的必要条件是v ≥ u / √(1 k²)这个不等式就是可行性判据。代一组示意数值u 1.5 m/s、k 0.8临界速度是 1.171 m/s。选手速度低于这个值无论怎么调整方向到达对岸时都会落过终点下游模型无解。判据还说明两件事。终点越偏下游k 越大可行性越宽松终点偏上游k 为负时虽然 √(1k²) 形式不变但需要顶着水流游实际耗时急剧上升。把这条判据写进论文比单纯给一张“最优路线图”有说服力得多因为它回答的是“什么情况下这场比赛对某类选手根本不成立”。3. 用 Python 复现参考论文的计算均匀流解析解到非均匀流数值解模型立住之后剩下的就是算。建议按“解析解 → 常数角打靶 → 逐点最优控制”三级递进每一级都能和上一级对照出问题时能立刻定位是哪一层写错了。3.1 均匀流的解析解先算一个能手算校验的基准把 2.3 的推导解出来得到最优角的闭式表达。设 A √(1k²)、φ arctan(k)则θ arccos(−u / (v·A)) − φ T L / (v·sinθ)import numpy as np def uniform_route(v, u, L, xb): 均匀流场下最短时间路线的解析解。 v : 选手相对水的速度 (m/s) u : 沿 x 方向的均匀流速 (m/s)正值为下游 L : 江宽 (m) xb : 终点相对出发点的下游偏移 (m) 返回 (theta_rad, T_sec)无可行解时返回 (None, None) k xb / L A np.hypot(1.0, k) if v * A abs(u): # 触及可行性边界无解 return None, None phi np.arctan(k) theta np.arccos(-u / (v * A)) - phi T L / (v * np.sin(theta)) return theta, T if __name__ __main__: L, xb 1000.0, 800.0 # 示意参数非原题数据 p a hrefhttps://download.csdn.net/download/zichengyixuan/3258104 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p
阅读完成 · 觉得有帮助?
咨询建站