常微分方程描述单变量函数的导数关系,是动力学 Dynamics系统建模的核心工具;叠加噪声项后推广为随机微分方程,完整演化脉络见微分方程。

定义

未知函数 只依赖一个自变量(通常是时间),方程约束它的变化率,配上初值 构成初值问题(Cauchy 问题)。解不是一个数,而是一条过 的曲线。

最简单的实例是指数衰减:

放射性衰变、RC 电路放电、神经元膜电位泄漏都是这个形式——变化率正比于当前值且方向相反,系统单调滑向平衡。

理论上,只要 及其对 的偏导连续(局部 Lipschitz 条件),初值问题在 附近就存在唯一解。「给定初值则未来完全确定」是 ODE 世界观的核心,也是拉普拉斯妖的数学出处;打破确定性的方式只有两种——混沌(确定但不可预测)和噪声(随机微分方程)。

类型形式实例
一阶 ODE人口增长、RC 电路
二阶 ODE牛顿第二定律、单摆
线性 ODE指数衰减
非线性 ODE一般形式Logistic 增长、洛伦兹方程

阶数是方程中出现的最高阶导数的阶数:牛顿力学 天然是二阶,需要位置和速度两个初值才能定解。线性性决定可解性——线性 ODE 有系统解法(见下节),非线性大多没有闭式解,只能数值推进。

非线性的典型如 Logistic 增长:

增长率随总量饱和,解是 S 形曲线——离散化后就是机器学习里的 sigmoid。更极端的例子是洛伦兹方程(三个耦合非线性 ODE):解对初值指数敏感,轨迹局限于奇怪吸引子,这就是混沌。

解析解法

闭式解覆盖面有限,但几类经典方法处理掉了最常见的可解结构。

分离变量

能拆成 时,变量分置两边分别积分:

指数增长/衰减、Logistic 方程都走这条路,是一阶方程的第一反应。

积分因子

一阶线性方程 ,两边乘 ,左边凑成全导数:

再积分一次即得通解。线性系统的标志也在这里:通解 = 齐次通解 + 任一特解,叠加原理成立;非线性方程没有这个结构。

特征方程

二阶常系数齐次方程 ,代入试探解 得特征方程 ,根的类型决定解的形态:

根的类型通解图像
共轭复根 欠阻尼振荡
重实根 临界阻尼
相异实根 过阻尼

弹簧-阻尼系统 完整落在这张表里:阻尼小则来回振荡衰减,阻尼大则缓慢蠕回平衡,临界阻尼是最快的无超调回归——汽车悬挂调参的目标就在临界附近。

数值解法

解析方法失效时的主力。统一框架:把 切成步长 的网格,逐步推进 。

方法全局精度特点
欧拉法沿左端点切线走一步,简单但精度低
龙格-库塔法四次斜率采样加权,精度高,工业标准
隐式法可变每步解方程组推进,适合刚性方程

欧拉法最直观:,在当前点沿切线走一步。每步局部误差 ,累积成全局 ——步长减半、误差减半,精度要求稍高就吃不消。

RK4 在区间内取四个采样斜率加权平均,把泰勒展开精确凑到 项:全局误差 ,步长减半、误差降 16 倍。代价是每步四次函数求值,换来的是几乎不用调参的默认选择——solve_ivp 的默认方法 RK45 就是它的自适应步长版。

刚性是数值 ODE 的独有难题:方程同时含快变模态(特征值 )和慢变模态时,解很快进入慢轨道,但显式法的稳定性(不是精度)强制步长 ——化学动力学、电路仿真里被迫用 的步长去跟踪 量级的时间尺度。隐式法每步解一个方程组换来稳定性,步长只受精度约束。

方法选择经验

默认 RK45;解出现剧烈多尺度行为(快瞬态 + 慢演化)或步长被压得离谱小时,换隐式刚性问题方法(odeint 的 LSODA、solve_ivp 的 Radau/BDF)。

与 PDE、SDE 的区别

类型全称自变量典型应用
ODEOrdinary Differential Equation(常微分方程)单一变量动力学系统、电路分析
PDEPartial Differential Equation(偏微分方程)多个变量热传导、流体力学
SDEStochastic Differential Equation(随机微分方程)随机过程扩散模型、期权定价,见随机微分方程

三者不是并列的三门课:ODE 是 PDE 空间离散化后的极限形态,也是 SDE 扩散项归零的退化特例。

Python 实现

from scipy.integrate import odeint
import numpy as np
 
def dydt(y, t):
    return -y  # y' = -y
 
t = np.linspace(0, 5, 100)
y = odeint(dydt, y0=1, t=t)

odeint 接口老但稳定,底层 LSODA 会在刚性/非刚性间自动切换。新代码建议 solve_ivp,支持自适应步长与方法选择:

from scipy.integrate import solve_ivp
import numpy as np
 
# 注意参数顺序与 odeint 相反:solve_ivp 要求 f(t, y)
sol = solve_ivp(lambda t, y: -y, [0, 5], [1], method="RK45", dense_output=True)
err = np.abs(sol.y[0] - np.exp(-sol.t)).max()  # 与解析解 y=e^{-t} 对比

应用场景

  • 物理系统:牛顿力学、电磁学—— 是动力学的母方程,拉格朗日方程与哈密顿方程是它的重构形式
  • 生物模型:种群动力学、传染病模型——SIR 方程组是三个耦合 ODE
  • 神经网络:神经 ODE、连续深度模型——把残差链 的层数推向连续极限
  • 控制理论:最优控制、系统辨识——状态空间模型的核心是一阶 ODE 方程组