上一节用判别式给方程分了型,这一节回答"分型到底分出了什么"。同样一份带棱角的初始数据,交给三族方程演化,结局截然不同:有的原样搬运,有的立刻磨平,有的干脆拒收初始数据。性格差异不是修辞——传播速度、光滑化机制、极值原理这三个维度,直接决定每一族方程该配什么定解条件、该用什么数值格式,本节结尾的互证实验会把这一点落到实处。
把一个高度为一的方波分别交给三条方程。双曲族(输运方程 u_t + c·u_x = 0,波动方程的同族近亲):方波以速度 c 整体平移,形状分毫不动。信息严格限定在特征线之间的区域内,波前之外完全无感——物理学的因果律在数学上表现为有限传播速度。抛物族(热传导方程):方波在 t 大于零的一瞬间变成无穷光滑的缓坡,哪怕只过了 0.001 秒;但作为交换,全空间瞬间都"知道"了方波的存在——无限传播速度,远处的响应虽然小到测不出,却不严格为零。椭圆族(拉普拉斯方程):它根本没有时间轴,"初始数据"这个概念不成立,硬给它初值就是不适定问题(下一节的阿达马反例正是这么构造的)。
三个维度把性格差异钉死:
| 维度 | 双曲(波动) | 抛物(热传导) | 椭圆(拉普拉斯) |
|---|---|---|---|
| 信息传播 | 有限速度 c,沿特征线 | 无限速度,指数衰减的尾巴 | 无传播概念,全域联立 |
| 初始棱角 | 原样保持,永远不磨平 | t 大于零瞬间无穷光滑 | 无初始时刻;解在区域内部自动解析 |
| 极值原理 | 不成立,能量可局部集中 | 成立:极值只能来自初值或边界 | 强形式成立:最值只能在边界 |
| 时间可逆性 | 可逆:把 t 换成 −t 仍是解 | 不可逆:逆热方程严重不适定 | 无时间方向 |
| 典型定解条件 | 初始位移加初速 | 初始分布 | 纯边界条件 |
极值原理值得单独展开,它是椭圆与抛物方程最有用的定性武器。热传导方程的最大值原理说:解在时空区域内部的最大值,不会超过初始时刻与边界上的最大值——杆上的温度不会凭空冒出一个比两端和初始都烫的点。它的推论直接可用于工程判断:散热设计的温度上界,不必解方程就能用边界条件估计。双曲方程没有这层保护,弦上可以出现比初始峰值更高的局部聚焦(两列波叠加的瞬间),这也是激波研究的起点(第五章)。
💡 关键直觉:想快速判断一条陌生方程的族属,用"棱角测试"——把一个不连续点放进初始数据,看它被搬运、被磨平、还是根本不被接受。这与 2.1 的判别式互为表里:代数看系数,物理看棱角。
性格差异最有操作价值的几何化,是依赖域与影响域。双曲方程:点 P 处 t 时刻的解,只依赖初始线上一个有限区段(以 P 为顶点、两条特征线夹出的底);反过来,初始线上一点的扰动只影响一个不断扩张的特征锥。这个图景是第三章达朗贝尔公式的直接来源,也是第四章 CFL 条件的物理内核——数值格式的依赖域必须覆盖方程的依赖域,否则格式再精细也收敛不到真解。抛物方程:依赖域是整条初始线(无限速度),但权重由高斯核分配,距离越远贡献衰减越快;数值上这意味着格式天然要求隐式或受限步长。椭圆方程:边界上任何一小块的变化都会波及全域内部每个点——肥皂膜上戳一个角,整张膜的形状都变。这就是为什么椭圆问题必须联立求解(第四章有限元组装出的正是整体线性系统),而不能像双曲问题那样沿特征线逐步推进。
一个工程案例把图景落到实处。散热器肋片的稳态温度场是椭圆问题(稳态热传导即拉普拉斯或泊松方程):改一块边界,全域重算,没有"局部更新"的捷径。而芯片瞬态上电过程是抛物问题:早期时刻的温度只由初始分布的邻近区域决定,可以用局部时间步推进。同一台设备、同一个物理量,两个阶段分属两族方程,求解策略完全不同——分类学的工程回报就在这里。
用十几行代码让三种性格同台。双曲用精确解公式(u = 初始波形平移),抛物用高斯核卷积(第一章提过的热核思想),椭圆做对照——尝试给它"初值"并观察病态:
import numpy as np x = np.linspace(0, 10, 1001) step = np.where((x > 4) & (x < 6), 1.0, 0.0) # 高度 1 的方波 c, t = 1.0, 2.0 # 双曲:精确解,方波原样搬到 [6, 8] adv = np.interp(x - c*t, x, step, left=0, right=0) print("双曲 后峰值:", adv.max(), " 过渡带宽:", np.sum((adv > 0.01) & (adv < 0.99)) * (x[1]-x[0])) # 抛物:热核卷积(a=1),尖角立即圆滑,尾部无限延伸 from numpy import exp ker = exp(-((x[:,None] - x[None,:])**2) / (4*t)) heat = (ker @ step) / ker.sum(axis=1) print("抛物 后峰值:", round(heat.max(), 4), " 半高宽:", np.sum(heat > 0.5) * (x[1]-x[0])) # 椭圆:拉普拉斯方程不接受初值。试着用"初始分布"外推稳态, # 只能反过来给边界条件:两端固定为零时,内部温度只能全为零 print("椭圆 零边值下内部解恒为零 —— 初值数据无处安放")
输出读法:双曲一栏峰值仍是 1、过渡带宽度约等于初始方波的棱角宽度——搬运不磨平;抛物一栏峰值明显低于 1(能量摊薄)、半高宽展宽——瞬间光滑化;椭圆一栏则说明"初值"对它是非法输入,数据只能从边界进。三种命运与 2.1 的判别式一一对应,这张对照表建议抄在笔记本第一页。
把性格差异翻译成格式设计的语言,就是第四章的预告片。双曲问题的信息沿特征线有限速传播,格式必须尊重这个速度上限——CFL 条件的本质就是要求格式的依赖域罩住方程的依赖域;同时棱角不被磨平的物理,逼着数值格式自带人工黏性或高阶重构,否则数值振荡会毁掉激波刻画。抛物问题的时间不可逆性意味着步进方向单一,无条件稳定的隐式格式(向后欧拉、克兰克–尼科尔森)成为标配,代价是每步解一个线性方程组。椭圆问题的全域联立本性,决定了它的大型稀疏线性系统求解效率是工程仿真的命门,第七章的并行计算大半火力都打在这里。
⚠️ 常见坑:用双曲的思路解抛物问题(沿"特征线"步进)或用抛物的步长习惯解双曲问题(步长只看精度不看稳定性),是初学者两类高频事故。写格式前先问:这条方程的性格允许什么样的依赖域?
性格差异已经看清,但一个更根本的问题浮出水面:给定方程和条件,凭什么相信解存在、唯一、而且不被输入噪声淹没?下一节的适定性三重契约,用一条著名的反例回答"凭什么"。