1. 课程导入与全景认知

在连续系统的建模与仿真中,微分方程描述的是系统在“两件事之间”如何平滑演化:温度如何缓慢上升、弹簧振子如何往复、电容电压如何指数衰减。但真实工程系统很少只做平滑演化——继电器会在电压越过阈值时吸合,弹跳球会在触地瞬间改变速度方向,电池管理系统会在荷电状态跌到下限时切断放电回路。这些“瞬间发生、改变系统演化规则”的时刻,就是事件;事件发生前后系统所遵循的方程或参数集合,就是不同的状态。本课程要解决的核心问题,正是如何让数值求解器可靠地发现这些时刻,并在时刻前后正确地切换方程。

一、什么是事件检测与状态切换

用一句话概括:事件检测是在连续求解过程中监视某个标量函数(事件函数)是否穿越零点的过程;状态切换是在检测到穿越后,修改系统状态变量、参数或微分方程右端函数,并让求解器以新的规则继续积分。

以经典的弹跳球为例。设球心高度为 h、竖直速度为 v,向上为正,重力加速度 g = 9.81 m/s²。自由飞行阶段满足:

dh/dt = v
dv/dt = -g

事件函数取 g(t) = h,当 h 从正变负时说明球已穿过地面。若求解器只是按固定步长前进,很可能在一步之内“跨过”地面,得到 h = -0.03 m 这样的非法状态,并且速度方向没有翻转,后续轨迹完全错误。正确做法是:在检测到符号变化后,用求根方法把穿越时刻定位到容差范围内(例如 1e-9 s),在该时刻执行切换 v ← -e·v(e 为恢复系数,示例取 0.8),再以新初值继续积分。这就是“检测—定位—切换—重启”的完整闭环。

二、核心问题拆解

看似简单的闭环,实际包含四个必须分别处理的技术难点,它们构成了本课程的主干:

  • 事件函数的构造与方向:事件函数必须连续、在穿越点附近单调性良好,且要区分“上升穿越”“下降穿越”还是“双向穿越”。若把 h 直接作为事件函数而不指定方向,球反弹后再次上升时可能被误判为又一次触地。
  • 穿越时刻的精确定位:常用Brent求根或二分法在 [t_n, t_n+Δt] 区间内迭代,终止条件同时考虑时间容差与函数值容差。定位精度直接影响能量误差累积。
  • 切换后的状态一致性:切换可能改变状态变量(如速度反向)、改变参数(如摩擦系数由动摩擦变为静摩擦)、甚至改变方程维数(如二极管由导通变为截止)。必须保证切换后初值自洽,避免代数环。
  • 芝诺现象与抖动:当系统在极短时间内反复穿越同一事件(如干摩擦下的粘滑、理想继电器在阈值附近的抖振),求解器会陷入无限次切换。需要设置最小驻留时间、滞环带或事件优先级来终止。
判断一个事件处理实现是否可靠,可以看三个指标:穿越时刻误差是否稳定在设定容差内、切换前后守恒量(如无阻尼系统的机械能)是否连续、以及事件密集发生时步长是否被合理压缩而非直接失败。

三、典型应用场景

事件检测并非数值计算的小技巧,而是多个工程领域的共性基础设施。机械系统中,接触/分离、限位碰撞、干摩擦的静动转换都是事件;电力电子中,二极管与开关管的通断使电路拓扑在多个线性系统间跳变,PWM 控制的每个边沿都是一次强制事件;控制系统中,饱和环节、死区、继电器输出、采样保持器都引入不连续;生物与化学中,神经元放电的阈值触发、细胞周期的相变、剂量切换都可用混合系统刻画。此外,游戏物理引擎的碰撞响应、电池管理的充放电模式切换,也都依赖同一套检测与切换逻辑。

这些场景的共同结构是:连续动态 + 离散跳变 = 混合系统。理解这一点,就能把看似无关的问题统一到同一套方法框架下。

四、整体学习路线图

本课程共 30 章,按“概念—方法—实现—验证—综合”的认知顺序组织。下图给出各模块之间的依赖关系与推进路径,建议按箭头方向学习,其中“事件定位算法”与“状态切换建模”是两条可以并行推进的主线,最终在综合案例处汇合。

微分方程事件检测与状态切换 · 学习路线 第1章 全景认知 连续动态 + 离散跳变 主线A:事件检测 事件函数 · 方向 · 零点定位 主线B:状态切换 方程切换 · 参数跳变 · 一致性 事件函数构造与符号约定 Brent / 二分法穿越时刻定位 容差、步长压缩与事件队列 混合系统建模与模式划分 切换映射与状态重置规则 芝诺现象、滞环与优先级 汇合:实现与验证 求解器集成 · 能量/守恒量校验 · 回归测试 综合案例:弹跳球 / 电力电子 / 干摩擦

路线图左侧聚焦“如何可靠地发现事件”,右侧聚焦“发现之后如何正确地改变系统”,二者在实现与验证阶段汇合。需要强调的是,两条主线并非完全独立:事件函数的构造方式会影响切换逻辑的复杂度,而切换映射的设计又会反过来决定事件函数是否需要滞环。因此在实际工程中,应当把二者放在同一个混合系统模型里统一设计,而不是先写完检测代码再补切换规则。

五、学习建议与先修要求

本课程假设读者已掌握常微分方程初值问题的基本概念、显式欧拉与四阶龙格—库塔法的迭代格式,以及至少一门科学计算语言(Python/NumPy、MATLAB 或 Julia 均可)。若对“局部截断误差”“刚性方程”尚不熟悉,建议先回顾数值分析中关于单步法与稳定域的内容。

学习时建议始终带着一个具体系统推进:从最简单的弹跳球开始,亲手实现事件函数、手写二分定位、观察切换前后的高度与速度序列,再逐步加入恢复系数、空气阻力、多次反弹的能量衰减,最后过渡到多事件并发的电力电子拓扑。每完成一个模块,都用“守恒量是否连续、穿越时刻误差是否收敛、事件密集时是否稳定”这三个问题检验自己的实现。这样在进入后续章节的算法细节时,你面对的就不是抽象公式,而是一个已经跑起来、可以被观测和调试的系统。

本节的关键结论:事件检测解决“何时切换”,状态切换解决“切换成什么”,二者共同构成混合系统数值仿真的核心。后续 29 章将围绕这两条主线逐层展开,并在综合案例中完成从模型到代码、从代码到验证的完整闭环。