本文将从线性代数的角度,将单变量函数 R→R 的微分扩展到多变量函数 Rn→R 上。用到的数学工具只有向量和矩阵。
多元函数的微分#
一阶导数:梯度向量#
设 f:Rn→R,我们可以对自变量 x=(x1,x2,⋯,xn)T 的每个分量分别求导数
∂xi∂f=h→0limhf(x1,⋯,xi+h,⋯,xn)−f(x1,⋯,xi,⋯,xn) 这就是 f 的偏导数。但偏导数固定其余分量,只变化第 i 个分量,因此只能表示对特定方向的变化率。
若想表示对任意方向的变化率,则我们需要一种来自线性代数的方法——先把原向量分解到每个分量上,然后计算各分量方向上的变化量,最后求和得到总的变化量。若 f 在 x0 处可微,则在 x0 处 f 有局部的线性性,因此这种分解是成立的。
对于单位向量 u∈Rn,其坐标已经完成了分解
u=u1u2⋮un 从而函数在该方向的变化率,即方向导数为
Duf(x)=∂x1∂fu1+∂x2∂fu2+⋯+∂xn∂fun=i=1∑n∂xi∂fui 写成向量形式
Duf(x)=[∂x1∂f∂x2∂f⋯∂xn∂f]u 该行向量的转置就是梯度向量——由各一阶偏导数组成的列向量
∇f(x)=∂x1∂f∂x2∂f⋮∂xn∂f 函数沿 dx=(dx1,dx2,⋯,dxn)T 的变化量为
df=∇f(x)⋅dx=i=1∑n∂xi∂fdxi 这就是全微分公式。
二阶导数:海森矩阵#
要继续求二阶导数,直接对梯度向量 ∇f 的每个分量 ∂xi∂f 继续求全微分即可
d(∂xi∂f)=j=1∑n∂xj∂(∂xi∂f)dxj=j=1∑n∂xj∂xi∂2fdxj=[∂x1∂xi∂2f∂x2∂xi∂2f⋯∂xn∂xi∂2f]dx1dx2⋮dxn 写成完整的矩阵形式
d∂x1∂f∂x2∂f⋮∂xn∂f=∂x12∂2f∂x1∂x2∂2f⋮∂x1∂xn∂2f∂x2∂x1∂2f∂x22∂2f⋮∂x2∂xn∂2f⋯⋯⋱⋯∂xn∂x1∂2f∂xn∂x2∂2f⋮∂xn2∂2fdx1dx2⋮dxn 该矩阵的转置就是海森矩阵
Hf(x)=∂x12∂2f∂x2∂x1∂2f⋮∂xn∂x1∂2f∂x1∂x2∂2f∂x22∂2f⋮∂xn∂x2∂2f⋯⋯⋱⋯∂x1∂xn∂2f∂x2∂xn∂2f⋮∂xn2∂2f 引入海森矩阵后,上述结果可优美地表示为
d(∇f)=HfTdx 现计算沿 dx=(dx1,dx2,⋯,dxn)T 的二阶变化量。我们已经得到了梯度向量的变化量 d(∇f),接着计算点积即可
d2f=d(∇f)⋅dx=(HfTdx)Tdx=dxTHfdx 这是一个标准的二次型。后文会尝试将其分解,以讨论更多的几何与代数含义。
当然,海森矩阵存在的前提是 f 具有二阶可微性。同时,若 f 的所有二阶偏导数连续,即 f∈C2,则混合偏导数与求导顺序无关
∂xi∂xj∂2f=∂xj∂xi∂2f 从而海森矩阵是对称矩阵,即 HfT=Hf。
高阶导数:张量与微分算子#
那么,多元函数的任意阶导数怎么求呢?先回顾一下 Rn→R 函数的一阶和二阶导数,它们的求导方式其实可以用微分算子进行统一表示。
定义微分算子
∇=∂1∂2⋮∂n 其中 ∂i=∂xi∂ 是对偏导数算子的简写。
一阶导数可以表示为该算子与函数的张量积。此时可以将张量积理解为线性代数中的外积
D1f=∇⊗f=∇(fT)=∇f 算子是 n 维向量,和标量 f 求张量积,得到 n 维向量,即
∇f=∂1∂2⋮∂nf=∂1f∂2f⋮∂nf 这就是梯度向量。继续把微分算子和一阶导数进行张量积,就得到了二阶导数
D2f=∇⊗(D1f)=∇(∇f)T=∇∇Tf 算子仍然是 n 维向量,和 n 维向量 ∇f 求张量积,得到 n×n 维矩阵,即
∇∇Tf=∂1∂2⋮∂n[∂1∂2⋯∂n]f=∂1∂1f∂2∂1f⋮∂n∂1f∂1∂2f∂2∂2f⋮∂n∂2f⋯⋯⋱⋯∂1∂nf∂2∂nf⋮∂n∂nf 这就是海森矩阵。
推广到三阶导数时,线性代数的外积无法表示张量积了。因此我们必须得定义张量积
一个 M 阶张量 A,维度为 I1×I2×⋯×IM,另一个 N 阶张量 B,维度为 J1×J2×⋯×JN,则它们的张量积 C=A⊗B 定义为
[A⊗B]i1…iMj1…jN=Ai1…iMBj1…jN 其阶数相加为 M+N,维度拼接为 I1×⋯×IM×J1×⋯×JN,而任意位置 (i1…iMj1…jN) 的元素,就等于原来两个张量在 (i1…iM) 和 (j1…jN) 处元素的乘积。张量积可以看作矩阵(二阶张量)乘法的推广。
由此得到三阶导数的定义
D3f=∇⊗(D2f) D3f 是三阶张量,由一阶张量 ∇ 和二阶张量 D2f 进行向量积得到。
可以进行递归定义
Dkf=∇⊗(Dk−1f) 如果不断展开,就可以得到
Dkf=∇⊗(Dk−1f)=∇⊗∇⊗(Dk−2f)⋯=∇⊗∇⊗⋯⊗∇f=∇⊗kf 其中 ∇⊗k 表示 ∇ 与自己进行张量积 k 次。
不过实际分析时,一般最多用到二阶导数,毕竟张量表示起来还是太麻烦了。
多元函数微分的应用#
代数应用:极值判别#
由于一阶变化量和二阶变化量都已经得到,我们可以进一步对多元函数进行泰勒展开
f(x0+h)=f(x0)+∇f(x0)Th+21hTHf(x0)h+o(∥h∥2) 忽略掉高次项后,函数 f 在 x0 附近的性质完全由线性项和二次项主导。
如果 x0 是驻点,即 ∇f(x0)=0,那么上式可被简化为
f(x0+h)−f(x0)=21hTHf(x0)h+o(∥h∥2) 此时增量 Δf=f(x0+h)−f(x0) 的符号由二次型 Q(h)=hTHf(x0)h 决定。
令 A=Hf(x0)。当 A 是实对称矩阵时,可以正交对角化为
A=QΛQT 其中
Q=[q1q2⋯qn] 是正交矩阵。每列 qi 为标准正交的特征向量,且满足 QT=Q−1。而
Λ=λ10⋮00λ2⋮0⋯⋯⋱⋯00⋮λn 是对角矩阵,主对角线上的每个元素 λi 均为实数特征值。
进一步用谱分解将 A 展开为秩一矩阵之和
A=QΛQT=[q1q2⋯qn]λ10⋮00λ2⋮0⋯⋯⋱⋯00⋮λnq1Tq2T⋮qnT=i=1∑nλiqiqiT 于是二次型变为
Q(h)=hTAh=hT(i=1∑nλiqiqiT)h=i=1∑nλihTqiqiTh=i=1∑nλi(h⋅qi)2 显然 (h⋅qi)2 非负。
因此,在驻点处,极值类型由海森矩阵各特征值的符号决定
- 若所有 λi>0,则海森矩阵正定。对任意非零 h,Q(h)>0,从而 f(x0+h)−f(x0)>0。此时称 x0 为局部极小点
- 若所有 λi<0,则海森矩阵负定。对任意非零 h,Q(h)<0,从而 f(x0+h)−f(x0)<0。此时称 x0 为局部极大点
- 若特征值有正有负,则海森矩阵不定,则存在一些 h 使 Q>0,另一些 h 使 Q<0,于是 f 在 x0 处沿不同方向既可能上升也可能下降。此时称 x0 为鞍点
- 若所有非零特征值同号且存在零特征值,则海森矩阵半正定或半负定。此时极值判定还需要看更高阶的项
几何应用:曲率#
二次型 hTHf(x0)h 除了可以判别驻点的类型外,还有重要的几何意义——它可以描述截面曲线在 x0 附近沿不同方向的曲率。
取一点 x0 和一个单位方向向量 v∈Rn,考虑经过 x0 且方向为 v 的参数化直线
l(t)=x0+tvt∈R 将 f 的自变量限制在这条直线上,得到一元函数
g(t)=f(x0+tv) g(t) 的图形是在点 x0 处用过 v 的平面截取出的曲线。对 g(t) 求导得到
dtdg=∇f(x0+tv)Tv 二阶导为
dt2d2g=vTHf(x0+tv)v 于是在 t=0 处
g′(0)g′′(0)=∇f(x0)Tv=vTHf(x0)v 根据平面曲线上曲率的定义,点 x0 处的有向曲率为
κv=[1+g′(0)2]3/2g′′(0) 在驻点处,即 ∇f(x0)=0 从而 g′(0)=0 时,有向曲率的表达式可以大幅简化为
κv=g′′(0)=vTHf(x0)v 此时曲率也由二次型 Q(v)=vTHf(x0)v 决定。
令 A=Hf(x0),复用之前谱分解的结果
A=i=1∑nλiqiqiT 对于任意方向 v,代入可得
vTAv=i=1∑nλi(v⋅qi)2 由正交性可知
qjTAqj=i=1∑nλi(qj⋅qi)2=λj(qjTqj)2=λj 因此沿着特征向量 qi 的有向截面曲率,就是对应的特征值 λi。而 v 上的曲率是投影到各特征方向 qi 上的曲率之和。
不过截面曲率只考虑一个方向的曲率,但有一些曲率是综合考虑了所有方向的——比如高斯曲率。
当 n=2 时,函数 f:R2→R 的图像是一个曲面,过 x0 的每个方向都有一条曲线。若用正负号表示弯曲的方向,用绝对值大小表示弯曲的程度,那么就得到了有向法曲率。有向法曲率的最大值和最小值被称为主曲率 k1,k2,而其方向被叫做主方向。高斯曲率就定义为主曲率的乘积
K=k1k2 可以证明,在驻点处,高斯曲率恰好等于海森矩阵的行列式。
计算驻点 x0 处沿方向 u 的有向法曲率
κu=uTHf(x0)u 根据瑞利商的性质,能取到这个二次型极值的单位向量,恰好就是海森矩阵 Hf 的两个特征向量 q1,q2。我们可以验证一下这个结论。
设单位向量为
u=[cos(θ)sin(θ)] 把海森矩阵简写为
Hf(x0)=[fxxfxyfxyfyy] 于是
κu(θ)=[cos(θ)sin(θ)][fxxfxyfxyfyy][cos(θ)sin(θ)]=fxxcos2(θ)+2fxycos(θ)sin(θ)+fyysin2(θ) 对 θ 求导
dθdκu=(−2fxx+2fyy)sinθcosθ+2fxy(cos2θ−sin2θ) 令导数为 0,得到
(fxx−fyy)sinθcosθ=fxy(cos2θ−sin2θ) 而若 u 为 H 的特征向量,则根据定义有
Hu=λu 这得到两个方程
{fxxcosθ+fxysinθ=λcosθfxycosθ+fyysinθ=λsinθ 消去 λ 得到
(fxx−fyy)cosθsinθ=fxy(cos2θ−sin2θ) 这和之前令导数为 0 得到的方程一模一样,于是两个方程有相同的解——这便证明了主方向恰好就是特征向量的方向。而特征向量方向的曲率为 λ1,λ2,继而得到
K=k1k2=λ1λ2=detHf(x0) 因此,在曲面的驻点处,高斯曲率的符号由海森矩阵的行列式决定
- 若 detHf>0,则高斯曲率为正。该点为椭圆点。由于只有两个特征值,因此 λ1,λ2 必然同号。若两个主曲率同正,则该点为局部极小点;若两个主曲率同负,则该点为局部极大点
- 若 detHf<0,则高斯曲率为负。该点为双曲点,也可以叫鞍点
- 若 detHf=0,则高斯曲率为零。若一个主曲率为零,另一个非零,则该点为抛物点;若两个主曲率都为零,则该点是退化的情形。