ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

常微分方程建模实战:从基础原理到SIR传染病模型应用

常微分方程建模实战:从基础原理到SIR传染病模型应用 1. 从“钉钉补课”到常微分方程一次线上数学建模课的复盘与重构去年四月我经历了一次特殊的线上教学。当时我负责的数学建模公选课正讲到常微分方程这一核心模块由于一些突发情况原定的课程需要通过钉钉平台进行补课。那几天的线上互动让我对如何高效地讲授常微分方程特别是如何将其与数学建模的实践思维结合起来有了更深层次的思考。今天我想把那次“钉钉补课”的内容进行一次系统性的复盘与重构不仅仅是分享讲义更是剖析背后的教学逻辑、学生常见的思维卡点以及如何将一个看似抽象的数学工具变成解决实际问题的利器。无论你是当时听课的学生想温故知新还是对数学建模和微分方程感兴趣的自学者这篇文章都将带你走一遍从理论到建模应用的完整路径。常微分方程ODE是描述动态系统变化规律的核心数学语言。在数学建模中它的地位举足轻重——从人口增长的预测、传染病传播的模拟到弹簧振子的运动、电路中的电流变化背后都是微分方程在发挥作用。然而很多初学者会陷入“求解技巧”的迷宫却忽略了建立方程这一更关键的建模环节。这次分享我将重点放在“如何根据实际问题建立微分方程模型”并辅以经典的、可操作的案例把那次线上课的精华加上我后续的反思与补充毫无保留地呈现出来。2. 常微分方程基础超越“求解”的建模视角在深入案例之前我们必须统一认识学习常微分方程对于数学建模而言首要目标不是成为解方程的“技巧大师”而是成为用方程描述世界的“翻译家”。这意味着我们的重点需要转移。2.1 核心概念重定义微分方程是“变化率”的说明书一个常微分方程本质上是一个建立了未知函数与其导数之间关系的方程。这里的“导数”dy/dt物理意义就是变化率。因此建立微分方程模型的关键一步就是将实际问题中关于“变化”的叙述翻译成数学上的导数关系。例如一个经典的表述是“某城市的人口增长率与当前人口数成正比。” 这句话的建模翻译过程如下设未知函数令P(t)表示 t 时刻的人口数量。找出变化率“人口增长率”就是人口数量随时间的变化率即导数dP/dt。建立等式关系“与当前人口数成正比”意味着dP/dt k * P(t)其中 k 是比例常数k0表示增长k0表示衰减。看模型dP/dt kP就这样建立起来了。它比原句更简洁、更精确并且为后续的数学分析求解、预测打开了大门。这个“叙述 - 导数关系”的翻译能力是数学建模的基本功。2.2 几类基本模型及其建模场景在补课时我重点梳理了几类最基础、也最常用的微分方程模型它们构成了许多复杂模型的基石。指数增长/衰减模型dy/dt ky。正如上面的人口例子它适用于变化率与当前状态成正比的场景。除了人口还有放射性物质衰变衰减率与剩余量成正比、银行连续复利本金增长与当前本金成正比等。逻辑斯蒂克Logistic模型dP/dt rP(1 - P/K)。这是对纯指数增长的修正引入了环境容纳量K的概念。它描述的是在资源有限的情况下增长初期近似指数后期受资源限制增速放缓最终趋于稳定值K。这是生态学中描述种群增长、市场营销中描述新产品用户增长市场饱和的经典模型。冷却定律模型dT/dt k(T - T_env)。牛顿冷却定律描述物体温度变化率与物体和环境的温差成正比。这是一个“趋于平衡”的模型广泛应用于热传导、金融学中价格向价值的回归等场景。混合问题模型这类问题通常涉及一个容器内某种物质浓度因流入和流出而发生变化。建立方程的核心是质量守恒容器内物质的变化率 流入速率 - 流出速率。关键在于流出溶液的浓度是随时间变化的等于当时容器内的瞬时浓度这是一个容易出错的点。注意在建立模型时一定要明确初始条件。微分方程本身只描述了变化的“规则”而具体的“故事”从哪里开始需要初始条件来定解。例如人口模型需要初始人口P(0)P0冷却问题需要初始温度T(0)T0。3. 建模实战拆解从问题陈述到方程求解理论说得再多不如一个实实在在的案例。下面我将用两个经典的建模案例完整展示从读题、假设、建立方程、求解到分析的全过程。这正是那次钉钉课上我们用屏幕共享一步步推导的。3.1 案例一湖水污染治理的混合问题问题描述某湖泊容积为V立方米初始时刻含有某种污染物m0千克。现以每秒r立方米的流速注入清洁水假设瞬间混合均匀并以相同流速从湖中排出混合后的水。建立污染物质量m(t)随时间变化的模型并求解。第一步模型假设与设定这是典型的混合问题。核心假设是“瞬间混合均匀”这意味着任何时候湖中各处以及流出水的污染物浓度都是相同的等于m(t)/V。第二步建立微分方程根据质量守恒定律污染物质量的变化率 流入污染物的速率 - 流出污染物的速率。流入的是清洁水流入污染物速率为0。流出的水携带污染物。流出水的体积流量为r(立方米/秒)其污染物浓度为当前湖中的浓度m(t)/V(千克/立方米)。 因此流出污染物的速率为r * [m(t)/V]。 所以变化率方程为dm/dt 0 - r * [m(t)/V] - (r/V) * m(t)第三步确定初始条件初始时刻t0污染物质量为m0。故m(0) m0。第四步求解方程我们得到了一个一阶线性齐次方程dm/dt (r/V)m 0。 这是可分离变量的也是标准的指数衰减形式。解为m(t) m0 * e^{-(r/V)t}第五步模型分析与应用物理意义模型表明污染物质量呈指数衰减。衰减系数是r/V其倒数V/r具有时间量纲被称为“冲刷时间常数”表示湖水整体被置换一次所需的理论时间。应用可以回答诸如“需要多长时间才能使污染物减少到初始的一半”求半衰期t_{1/2} (V/r) * ln2或“要使污染物在T时间内降至安全标准M以下需要的清水流速r至少是多少”等问题。常见错误学生最容易错在流出速率上误以为流出浓度是常数。必须强调“瞬时浓度”的概念。3.2 案例二传染病传播的SIR模型SIR模型是流行病学的基础也是数学建模课的明星案例。它完美体现了如何用微分方程组描述一个动态过程。问题描述在一个封闭人群中将个体分为三类易感者S未患病但可能感染、感染者I已患病且可传染、康复者R已痊愈并获得免疫力不再参与传播。试建立描述这三类人数变化的模型。第一步模型假设总人数N S I R恒定封闭系统不考虑出生死亡和迁移。疾病传播由有效接触导致。单位时间内一个感染者能传染的易感者人数与当时易感者总数成正比比例系数为β传染率。感染者以固定速率γ康复并移入康复者类别。1/γ的平均感染期。康复者获得永久免疫力。第二步建立微分方程组这是建模的精华部分我们需要思考每个群体变化率的来源。易感者 S(t)数量只会减少减少的原因是被感染。根据假设2单位时间内新感染的人数为β * S * I / N有时简写为βSI前提是设β已包含了1/N的归一化。所以dS/dt -β * S * I / N感染者 I(t)数量增加来源于易感者被感染减少来源于康复。所以dI/dt β * S * I / N - γI康复者 R(t)数量增加来源于感染者康复。所以dR/dt γI第三步模型分析与关键概念这个方程组通常没有解析解需要数值求解。但这不妨碍我们进行重要的理论分析。基本再生数 R0这是一个核心概念。R0 β / γ。它表示在一个完全易感的人群中一个感染者在其整个传染期内平均能传染的人数。若R0 1疾病无法流行会逐渐消失。若R0 1疾病可能爆发流行。模型应用通过估计现实中的β和γ或R0可以模拟疫情发展曲线预测峰值感染人数和到来时间评估隔离降低β、加快医疗提高γ等干预措施的效果。提示在数学建模竞赛中像SIR这类经典模型直接套用公式是不够的。高分论文往往需要对模型进行“本土化”改进例如考虑潜伏期SEIR模型、考虑年龄结构、空间扩散或者将参数β设为随时间变化的函数以模拟防控措施的影响。这体现了从“学模型”到“用模型、改模型”的飞跃。4. 求解方法精讲解析与数值两手都要硬建立模型后下一步就是求解。在公选课层面我们需要掌握两类方法解析解法和数值解法。4.1 解析解法适用于经典可解模型对于像指数模型、Logistic模型、一阶线性方程等我们可以通过分离变量、积分因子等方法求得精确的解析解y f(t)。解析解的优势在于清晰直观可以直接看出函数形态指数增长、S型曲线等。便于分析可以直接求导、求极限分析长期趋势、平衡点稳定性等。计算快速给定时间t代入公式即可得结果。例如Logistic方程dP/dt rP(1-P/K)的解析解为P(t) K / [1 ((K - P0)/P0) * e^{-rt}]从这个解我们能直接看出当t - ∞时P(t) - K即人口趋于环境容量。教学心得在讲解解析解法时我特别强调“分离变量”的物理意义——将关于变量P和变量t的部分分别放到等式两边实质上是将“变化过程”进行了一种数学上的“记账分离”积分则是将这些微小变化累积起来。这种解释比纯代数操作更容易让学生理解。4.2 数值解法应对现实世界的复杂性绝大多数从实际问题中导出的微分方程尤其是方程组是求不出解析解的。这时必须依靠数值解法用计算机求近似解。补课时我重点介绍了欧拉法因为它原理最简单是理解数值解思想的敲门砖。欧拉法的思想与步骤 核心思想是用“折线”逼近“曲线”。已知dy/dt f(t, y)和初始值y(t0)y0。离散化时间将时间区间分成小段步长为h。得到时间点t0, t1t0h, t2t02h, ...迭代计算利用导数近似等于差商即(y_{n1} - y_n) / h ≈ f(t_n, y_n)。 因此迭代公式为y_{n1} y_n h * f(t_n, y_n)。从初始点开始用这个公式一步步算出y1, y2, y3...这些点连成的折线就是微分方程数值解的近似。以指数衰减模型dy/dt -0.5y, y(0)100为例取 h1t00, y0100. t11, y1 y0 1 * f(0,100) 100 1 * (-0.5*100) 50. t22, y2 y1 1 * f(1,50) 50 1 * (-0.5*50) 25. ...欧拉法的局限与改进 欧拉法简单但精度低且步长h选择不当可能导致结果不稳定或不准确。在实际科研和工程中更常用的是四阶龙格-库塔法RK4。它通过在一个步长内计算多个斜率并进行加权平均大大提高了精度。对于初学者理解欧拉法足以掌握数值解的思想实际编程计算则可以直接调用MATLAB的ode45或 Python SciPy的solve_ivp这些内置函数它们采用了更高级的自适应变步长算法。注意数值解法的教学一定要配合编程演示。在钉钉课上我共享了MATLAB的脚本窗口现场敲代码展示如何用ode45求解SIR模型并绘图。视觉化的结果三条曲线的动态变化比任何文字都更能让学生理解模型的内涵。我强烈建议学习者无论用什么工具一定要亲手实现一次数值求解。5. 线上教学反思与模型实现的工具建议那次钉钉补课是一次被动的线上教学尝试但也让我积累了一些关于传授数学建模这类实践性内容的经验。5.1 线上互动中的难点与突破最大的挑战是“板书”和“实时推导”的不便。虽然钉钉有白板但书写效率远不及物理黑板。我的应对策略是课前预制核心推导将关键模型的建立步骤、方程推导过程做成清晰的PPT幻灯片或电子文档。课上共享屏幕以此为基础讲解省去大量书写时间。聚焦思维过程线上课更应避免陷入复杂的计算泥潭。重点讲“为什么要这样设变量”、“这个等式的物理依据是什么”、“如果改变某个假设方程会怎么变”。把推导的“结果”提前给出把“思考”的过程作为讲解重点。代码直播对于数值求解部分直接直播编程。从打开软件、写第一行代码开始到运行、调试、出图。这个过程能极大提升学生的信心让他们看到模型“活”起来。遇到报错当场解决这也是宝贵的学习经验。5.2 给学习者的工具链建议工欲善其事必先利其器。对于数学建模中的微分方程部分我推荐以下工具组合分析与草稿纸笔 LaTeX。初期构思、变量定义、方程建立最好在纸上画写。整理成文时学习使用LaTeX如Overleaf在线平台它排版数学公式非常美观专业是撰写建模论文的必备技能。解析推导Mathematica / Maple。如果你需要进行复杂的符号运算求导、积分、解方程这类计算机代数系统是无敌的。它们能帮你验证手算结果处理繁琐的代数操作。数值计算与可视化MATLAB 或 Python (NumPy/SciPy Matplotlib)。MATLAB在工程和学术界应用极广内置的ODE求解器如ode45,ode15s非常强大且易用绘图功能也直观。对于课程学习和快速原型开发非常友好。Python通用性更强免费开源。通过SciPy.integrate.solve_ivp函数可以解决大多数常微分方程组的数值求解问题。结合NumPy和Matplotlib能完成从计算到可视化的全部工作。Jupyter Notebook 环境尤其适合做交互式的建模演示和报告。个人踩坑心得初学者常犯的一个错误是拿到问题就急着打开软件编程。结果往往是代码写出来了但模型本身是错的。我的工作流永远是1) 在纸上彻底厘清问题做出合理假设写出微分方程组2) 检查量纲是否一致3) 尽可能先求解析解或分析平衡点、稳定性4) 最后才进入编程实现数值解和绘图。这个顺序能确保你的代码是在实现一个正确的模型而不是把一个模糊的想法变成一堆错误的数字。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进