偏微分方程是一句关于斜率的话
取最简单不过的一阶偏微分方程:du/dt + c du/dx = 0,其中 c 是常数。盯住左边,问它究竟在量什么。回想第一卷:偏导数 du/dt 是固定 x、向时间迈一步时 u 变化多快,而 du/dx 是固定 t、向右迈一步时 u 变化多快。方程把它俩黏在一起:它说 u 并不能随心所欲地摆动——在 (x, t) 平面的每一点,它两个斜率的某个特定组合都必须相消为零。这是对整张曲面 u(x, t) 形状的一道约束,而我们全部的活儿,就是破译什么形状服从它。
火花就在这里。组合 du/dt + c du/dx 恰是乔装打扮的链式法则。设你并非站着不动,而是沿某条路径 x = x(t) 穿过平面,边走边看 u 如何变化。你看到的总变化率是 d/dt of u(x(t), t) = du/dt + (dx/dt) du/dx。把它与偏微分方程对照:只要你选择以速度 dx/dt = c 行走,这两个表达式就立刻一模一样。于是沿着那条以速度 c 向右移动的特殊路径,偏微分方程不再说「某个神秘的斜率组合为零」——它说的是平平常常的那句话:沿路径的 du/dt = 0。当你骑行那条路径时,函数根本不变。
特征线:载着答案的曲线
那些特殊路径有个名字:它们就是特征线,而整套技术叫特征线法。对我们的方程,特征线满足那个小小的常微分方程 dx/dt = c,其解是直线 x = c t + x0,每个起点 x0 对应一条线。想象 (x, t) 平面被一族平行直线梳理过,它们全都以斜率 c 倾斜。偏微分方程刚刚告诉我们:u 沿每一条这样的线都是常数。所以只要你在某条特征线的一点知道 u,整条线上的值你就白白得到了——那个值只是顺着线滑过去,纹丝不变。
现在喂进一个初始轮廓。设在 t = 0 时函数是某给定形状 u(x, 0) = f(x)。每条特征线都载着它出发时的值。过起点 x0 的线满足 x0 = x - c t,所以坐在 (x, t) 处的值就是从 x0 = x - c t 出发的那个值,即 f(x - c t)。这就是全部的解:u(x, t) = f(x - c t)。从物理上读它,美极了——它是初始形状 f 以速度 c 向右滑动,刚性不变、毫无畸变。我们那道抽象的斜率约束,原来不过意味着「图案在行进」。这个方程因而恰如其分地被称为输运方程或对流方程。
PDE: u_t + c u_x = 0, u(x,0) = f(x)
Step 1 Characteristic ODE: dx/dt = c -> x = c t + x0
Step 2 Along it: d/dt[ u(x(t),t) ] = u_t + (dx/dt) u_x = u_t + c u_x = 0
so u is CONSTANT on each line.
Step 3 Label the line by its start: x0 = x - c t
Step 4 Constant value = its initial value: u = f(x0)
===> u(x,t) = f(x - c t) (initial shape, rigid, moving right at speed c)
t
^ \ \ \ each \ is a characteristic x = c t + x0;
| \ \ \ u keeps its starting value all the way up the line
+--------\----\----\-----> x当速度依赖于 u,以及它在哪里崩坏
这套方法并不要求方程是线性的,而这正是它真正赚到本钱的地方。考虑 du/dt + u du/dx = 0——同样的形式,但现在输运速度是 u 自身,正是你要求解的那个东西。链式法则的论证丝毫未变:沿着满足 dx/dt = u 的路径,方程再次说沿路径的 du/dt = 0,所以 u 在每条特征线上仍是常数。但现在,一条特征线的速度等于它所载的那个常数值——波的高处一路狂奔,低处则落在后面。特征线仍是直线,却以不同的斜率呈扇形散开,而不再齐头并进。
想象一个平滑的水丘。波峰比前缘移动得快,于是前坡变陡、向前倾、最终竖直起来——恰如海浪在拍碎前卷起。从数学上说,两条载着不同值的特征线相撞;在那个交点,本应成立的解被要求同时取两个值,于是一个光滑的单值 u(x, t) 干脆不复存在。这就是激波:一个间断,真真切切地从完全光滑的初始数据中诞生出来。这并非方法的瑕疵——恰恰是这套方法,精确到那一瞬,预言出光滑性必将在何时何地消亡。
把波动方程分解成两个输运
现在把同一思想转向本阶梯的明珠——二阶波动方程 d^2u/dt^2 = c^2 d^2u/dx^2。它看上去像另一种生物——二阶、两个时间导数——但这里有一手漂亮的障眼法。把求导算子当作代数来对待:方程是 (d/dt)^2 u - c^2 (d/dx)^2 u = 0,而平方差是可以分解的。于是它写作 (d/dt - c d/dx)(d/dt + c d/dx) u = 0。这单个二阶波动方程,已经裂成我们刚刚掌握的两个一阶输运算子的乘积——一个以速度 c 把东西往右载,一个往左载。
这正是波动方程作为标准双曲型方程的缘由:它有两族实的、彼此不同的特征线——右行者 x - c t = 常数,与左行者 x + c t = 常数。看清它最干净的办法,是换坐标到 xi = x - c t 与 eta = x + c t——即特征坐标。把链式法则一路碾过去(这是唯一一处诚实的记账),波动方程便化为出奇简单的 d^2u/(d xi d eta) = 0。照字面读它:(du/d xi) 对 eta 的导数为零,所以 du/d xi 只依赖 xi,再积分一次,u 必是 xi 的一个函数加上 eta 的一个函数。两个任意函数,每族特征线各一个。
达朗贝尔:两列彼此穿越的波
把代换逆回去,那个双函数答案便成了著名的达朗贝尔解:u(x, t) = F(x - c t) + G(x + c t)。说白了,波动方程的每一个解,都是一个右行形状 F 加一个左行形状 G,各自以速度 c 刚性滑行,并干干净净地从对方身上穿过。拨动的吉他弦正是如此——初始的鼓包裂成两份半高的副本,朝相反方向跑开。与分离变量法不同——后者用无穷多个驻波模式把答案慢慢搭起来——达朗贝尔径直把完整的通解以闭式交给你,无需任何级数。
要把一个具体问题做完,你用波动方程所需的两个初始条件去定 F 与 G:初始形状 u(x, 0) = f(x) 和初始速度 du/dt(x, 0) = g(x)。把它们匹配上、解那一小对方程,便得到达朗贝尔的显式公式 u(x, t) = (1/2)[ f(x - c t) + f(x + c t) ] + (1/(2c)) 乘以 从 x - c t 到 x + c t 对 g(s) ds 的积分。看这公式坦白了什么:(x, t) 处的值只依赖于 x - c t 与 x + c t 之间的初始数据。那段区间就是依赖域,而它的两端恰是过 (x, t) 的两条特征线——这从物理上证明了:这世界上没有任何东西比波速 c 跑得更快。
- 由分解写出通解:u(x, t) = F(x - c t) + G(x + c t),每族特征线对应一列行波。
- 施加初始形状:在 t = 0 时,F(x) + G(x) = f(x)。
- 施加初始速度:对 t 求导并令 t = 0,得到 -c F'(x) + c G'(x) = g(x)。
- 联立这两个关系解出 F 与 G(一次除法、一次积分),再拼回去即得达朗贝尔公式。
为什么这套方法该进你的工具箱
对你刚获得的本领,划两条诚实的边界。其一,这般干净形式的达朗贝尔公式,是自由空间、无穷长直线上的答案;一旦有了墙壁——比如两端夹死的弦——行波就必须反射,你得把 f 与 g 作奇延拓地周期延展进去缝合,或者退回分离变量法与驻波。行波与驻波这两幅图,是同一个解的两种看法,哪一种更省事,全看几何。其二,干净地分解成两族实特征线,是双曲型情形所特有的。
最后这一点把整个阶梯系在了一起。一个二阶方程是按它的特征线分类的:像波动方程这样的双曲型方程有两族实特征线,信息以有限速度沿它们传播;像热方程这样的抛物型方程只有一族(重根的)特征线,并瞬间把数据抹平;像拉普拉斯方程这样的椭圆型方程则根本没有实特征线,正因如此,一个稳态势会同时感受到它边界的每一处。特征线绝非一阶问题专享的把戏——它正是偏微分方程的类型所由以构筑之物,是决定一个扰动被允许如何传播的那副骨架。
退一步,那种统一令人惊叹。一阶偏微分方程,靠骑上一些使其变为常微分方程的曲线来求解;波动方程,靠把它分解成两个这样的一阶部件来求解;而掉出来的达朗贝尔公式不只是一个答案,更是一份适定性的证明——一个唯一、且连续依赖于数据的解,内里还烤进了一道严格、有限的速度上限。从一个朴素的观察——du/dt + c du/dx 是一个蓄势待发的链式法则——你已抵达了行波、激波的形成、所有二阶偏微分方程的分类,乃至因果律本身。