DDG课程笔记3-Laplace算子

这个系列是对CMU离散微分几何课程(CMU CS 15-458/858: Discrete Differential Geometry)的总结和回顾。本节我们介绍几何处理中最实用的工具-Laplace算子。

Overview

Laplace算子(Laplacian)在不同的领域里都有非常重要的应用。在物理学中我们可以通过Laplace算子来描述不同的物理现象:

在几何处理中Laplace算子描述了网格的局部信息,因此也称为微分坐标(differential coordinates)。同时,Laplace算子也和平均曲率以及网格的频率信息有着紧密的联系:

欧式空间中的Laplace算子可以定义为函数二阶导数的和:

Δu=i=1n2uxi2

因此Laplace算子描述了函数在局部邻域内的性质,我们可以通过Laplace算子来计算函数的极值点以及曲率:

在图论中,Laplace算子则描述了节点和它相邻节点平均值的相对关系:

(Lu)i=(1deg(i)ijEuj)ui

在社交网络中这表示每一个人总是与和他相关的人具有相似的属性(观点)。

Definitions

尽管Laplace算子在不同的领域中有着不同的定义,我们可以看出Laplace算子描述了一个对象和它相邻对象平均值的关系。同时,针对Laplace算子的不同性质也可以给出很多等价的定义。考虑Laplace算子可以看做是偏导数的和,这里给出Laplace算子在流形上的定义:

Δu=i=1nj=1n1det(g)xi(det(g)(g1)ijxju)

可以验证在欧式空间下上式会退化为我们熟悉的二阶导数和的形式Δu=i=1n2uxi2。尽管这个式子十分复杂,在实际的计算中基本不会直接使用它。

对函数u进行泰勒展开并保留前两项得到:

u(x0+w)u(x0)+u(x0),w+122u(x0)w,w

不难发现Laplace算子等于Hessian矩阵的迹:

Δu=2ux2+2uy2=tr(2u)

在曲面上使用协变导数(covariant derivative)来代替欧式坐标中的导数,得到:

X,Y2u(X,Y)=(Xdu)(Y)

此时Laplace算子仍然等于Hessian矩阵的迹:

Δu=tr(2u)=tr(du)

Laplace算子还可以定义为梯度的散度,此时表达式为:

Δu=u

此外,我们还可以通过随机游走(布朗运动(Brownian motion))来认识Laplace算子。对于单一粒子的随机游走其状态可由热传导方程进行刻画,带入初始条件ϕ得到:

{ddtu=Δuu|t=0=ϕu(t,x)=Ωkt(x,y)ϕ(y)dy=E[ϕ(Xt)]

其中kt(x,y)称为热核(heat kernel)函数,表示从具有单位温度的热源x经时间t传播到y处时的温度,这里可以认为是粒子从x出发在t时刻位于y的概率密度;Xt表示随机游走的粒子在t时刻的位置。

最后来介绍Laplace算子与Dirichlet能量(Dirichlet energy)的关系。定义Dirichlet能量为:

E(u)=M|u|2dA=MuΔudA=Δu,u

Dirichlet能量描述了函数的光滑程度:Dirichlet能量越小表示函数越光滑、变化越平稳;Dirichlet能量越大表示函数越粗糙、变化越剧烈。同时可以证明最小化Dirichlet能量相当于求解Laplace方程:

u=argminE(u)Δu=0

Properties

Laplace算子有非常丰富的性质,这里只介绍一些比较常用的性质:

  • 线性算子:Δ(f+αg)=Δf+αΔg
  • 常值函数满足Δα=0
  • 对刚体变换保持不变
  • 可交换性:对等距映射η满足ηΔ=Δη
  • 自伴随:MfΔgdA=MgΔfdA
  • (半)负定:MfΔfdA0

值得一提的是Laplace算子还具有谱性质(spectral properties)。类似于实对称矩阵的特征向量,Laplace算子存在正交的特征函数:

Δϕi=λiϕi MϕdA=1

其中0λ1λ2...。上式表明可以把Laplace算子看做是无穷维的(半)负定矩阵,特征函数对应矩阵的特征向量。此外特征函数构成了函数空间中的基,因此可以对任意函数f进行分解:

f=iαiϕi

利用特征函数分解还可以将Dirichlet能量写成级数的形式:

E(f)=M|f|2dA=MfΔfdA=iαi2(λi)

Discretization via DEC

接下来推导离散Laplace算子的表达式,这里我们使用离散外微分来进行推导。首先给出光滑曲面上Laplace算子的表达式:

Δu=ddu

使用外微分形式的好处在于我们可以直接进行离散,得到网格上的Laplace算子:

Δu=01d0T1d0u

上式表明我们可以直接使用我们已经推导的离散微分算子来构造出Laplace算子。实际上我们还可以把它们写成更紧凑的形式:对于0-form u,它的离散外微分du等于顶点函数值的差:

(du)ij=eijdu=eiju=ujui

du上使用Hodge star算子等于将du缩放到dual边eij上:

(du)ij=|eij||eij|(ujui)

其中,

|eij||eij|=12(cotαj+cotβj)

接着对dual 1-form (du)ij进行微分,相当于把dual cell边界上的积分加起来,得到dual 2-form (ddu)i

(ddu)i=Ciddu=Cidu=j|eij||eij|(ujui)=12j(cotαj+cotβj)(ujui)

此时我们得到的dual 2-form (ddu)i 与0-form (ddu)i 只相差dual cell的面积,相当于是 (ddu)i 在dual cell上面的积分。通常情况下我们会把dual cell的面积提出来单独处理,进而定义离散Laplace算子为:

(Δu)i=12j(cotαj+cotβj)(ujui)

上式称为cotan-Laplace算子(cotan Laplacian)。注意到cotan-Laplace算子与平均曲率向量(HN)i只相差一个符号,因此在有些资料中也会直接将平均曲率向量(HN)i定义为Laplace算子,此时的Laplace算子为(半)正定。

Applications

Heat Equation

有了离散Laplace算子我们就可以在网格上解微分方程,比如说热传导方程(heat equation)

ddtu=Δu

由于离散Laplace算子和平均曲率向量具有相同的形式,实际上平均曲率流的迭代算法也可以看做是求解热传导方程。取u为顶点坐标的函数,带入热传导方程并进行离散得到:

uk+1ukh=Luk

其中L为Laplace算子的矩阵形式,h为时间步长。对方程进行整理可以得到迭代格式:

uk+1=(I+hL)uk

上式称为热传导方程的显式迭代(explicit update)。实际工程中更常用的是隐式迭代(implicit update),此时需要将递推式修改为:

uk+1ukh=Luk+1

整理得到:

(IhL)uk+1=uk

和显式迭代相比隐式迭代在数值上更稳定,因此大部分情况下推荐使用隐式迭代算法。

Poisson Equation

在几何处理中另一类常见的微分方程是泊松方程(Poisson equation)

{Δu=f,on Ωu=g,on Ω

实际上泊松方程可以看做是稳态传热情况下的热传导方程。假设Ω内存在热源f且边界条件为g,此时热传导方程可表示为:

{ddtu=Δu+f,on Ωu=g,on Ω

Ω达到热平衡时u关于时间的导数为0,此时热传导方程即为泊松方程。

除此之外,泊松方程也可以理解为最小化Dirichlet能量。假设已知向量场X,我们希望寻找一个势场u使得u可以表示X,因此构造Dirichlet能量:

E(u)=M|uX|2dA

可以证明最小化Dirichlet能量等价于求解泊松方程:

Δu=X

Boundary Conditions

我们知道边界条件对于微分方程起着至关重要的作用,因此求解泊松方程之前还要介绍一些常见边界条件。常见边界条件包括Dirichlet边界和Neumann边界,其中Dirichlet边界表示在边界上指定了函数值而Neumann边界则表示在边界上指定了函数梯度。以一维函数为例,Dirichlet边界指定了函数在端点的值而Neumann边界则指定了函数的导数:

同时需要注意对于Dirichlet边界方程一定有解,而对于Neumann边界则可能会出现无解的情况:

以二维Laplace方程为例,根据散度定理有:

Ω0 dA=ΩΔu dA=Ωu dA=Ωnu ds

也就是说Laplace方程有解需要保证方向导数 nu=un 沿边界的积分为0,因此对于Neumann边界需要小心处理。

最后我们来讨论一下如何求解泊松方程。对于无边界的情况,泊松方程退化为Δu=f,对应的离散形式为:

Lu=Mf

这里M为顶点dual cell面积构成的对角矩阵,它来自于cotan-Laplace算子中忽略的01项。此时微分方程转换为线性方程组,利用Laplace矩阵L的对称性可通过Cholesky分解来进行求解。

当泊松方程只存在Dirichlet边界时,我们可以将网格内部和边界分开来考虑。此时泊松方程可表示为:

[LIILIBLBILBB][uIuB]=[MI00MB][fIfB]

下标IB分别表示网格的内部和边界。由于已知边界上的函数值uB,我们只需要在网格内部进行求解即可。带入uB整理得到:

LIIuI=MIIfILIBuB

如果存在Neumann边界则需要对泊松方程进行一定的修改。对于边界上的顶点,回忆Laplace算子是函数在dual cell上的积分,此时需要更新为:

(Δu)i=12(ga+gb)+12j(cotαj+cotβj)(ujui)

其中gagb分别为给定方向导数在边界上的积分。

gagb移到方程右侧,得到包含Neumann边界的泊松方程:

[LIILIBLBILBB][uIuB]=[MIfIMBfBg]

此时按无边界的情况进行求解即可。

Reference