拉普拉斯算子是与邻居平均的差
站在一个点上,把它紧邻的邻居所持的值取平均。若那个平均比你所站之处的值高,你就在一处洼地,比邻居陷得更低。若平均更低,你就在一座隆起的峰上。这个差,正是拉普拉斯算子。它是梯度的散度(∇·∇f),也就是 ∂²f/∂x² + ∂²f/∂y²,归根结底是用一个数量出"你偏离邻居平均有多远"。峰上为负,洼地为正。这一个量,牵动着热如何扩散、绷紧的膜如何安顿、乃至电位如何排布的规则。它是用一点处的二阶导数,为向量分析这一束(梯度、散度、旋度)收尾的算子。
在场上拖动探针。每放一处,都绕上一圈六个邻居取样点。画面下方出现三个数:中心值、六个邻居的平均、以及与二者之差成正比的 ∇²f。把它放在峰(右上)上,邻居平均低于中心,于是 ∇²f 为负,是蓝色的峰。把它放在洼地(左下)上,邻居平均更高,于是 ∇²f 为正,是金色的洼地。请亲手体会:拉普拉斯算子归根结底就是一个数——你偏离邻居平均有多远。
这次在同一个场上,看看拉普拉斯算子为何是"梯度的散度"。拖动探针,它周围的圈上出现六支梯度箭头。每支箭头都指向那一处最陡的上坡。在峰上,箭头全都朝探针聚拢,因为上坡指向内侧的峰。向内聚拢的流动散度为负,所以 ∇·∇f < 0。在洼地上,箭头全都向外伸展,散度为正,∇·∇f > 0。画面上显示"∇²f = ∇·(∇f)"以及它的实时值。用箭头亲眼看到:拉普拉斯算子就是散度(第3讲)对梯度(第2讲)再作用一次。
现在不看一个点,而用颜色看整片场的拉普拉斯算子。滑块 s 把右上那座峰的高度从 0.5 改到 3。背景颜色正是 ∇²f 的地图。金色是洼地(∇²f > 0,低于平均),蓝色是峰(∇²f < 0,高于平均),峰顶与洼底显得最浓。调大 s,右上的峰拔起,那里的蓝色区域加深、扩大。调小 s,那座峰平息,蓝色淡去。左下的洼地不论 s 如何都保持金色。看一个滑块如何把整张拉普拉斯地图重新上色。
拉普拉斯算子处处为0的场,称为调和场(harmonic)。用按钮切换两个场。一个是 h(x,y) = x·y,一个鞍形。在每一点上,横向凹进多少,纵向就凸出多少,二者恰好抵消,于是 ∇²h = 0。中心取样的 ∇² 读数显示近乎0。另一个是 b(x,y),一座高斯隆起,一个真正鼓起的包,所以在中心 ∇²b 明显为负。要点在此:调和场内部不能有峰,也不能有洼。既然每一点都等于其邻居的平均,最高或最低之处便永远只在边界上。这就是稳态热、电位、绷紧的膜背后的深层规则。
看看拉普拉斯算子为何是扩散的引擎。热方程是 ∂f/∂t = ∇²f。它说每一点的值,每一刻都按它的拉普拉斯算子变化。洼地(∇²f > 0)升起,峰(∇²f < 0)落下,于是处处都被拉向邻居平均。格子有一个凹凸不平的初始状态,上面摆了两座峰。每按一次"单步"按钮,每个格子就朝它的邻居平均迈一步。没有自动循环。只有你按时才走一步。越按峰越低、谷越满,颜色舒展得越均匀。"复位"回到最初凹凸的状态。一边数步数,一边分阶段亲眼看拉普拉斯算子如何抹平差异。