散度、旋度——2D矢量场的微分直观图像
unidentified2015
2019年07月04日 12:50
收录于文集
共3篇

这是多元函数微分直观图像系列的第三篇,前两篇链接如下:

2D矢量场

上一篇讲到了由两个二元函数组成的二元二维向量函数能代表二维变换。现在我们将这个向量函数赋予另一个几何意义,向量场(同矢量场)。每一个空间位置(x,y)上都对应一个矢量(u,v),这就是矢量场。谈到矢量场我通常想给矢量赋予物理含义,这里的矢量可以是位移、速度、加速度、力、动量、冲量、电场强度、磁感应强度等。

图片来源https://anvaka.github.io/fieldplay/ 无粘流体圆柱绕流速度场,红色流速大,绿色流速小。

风在吹、水在流,每个空间点都对应着一个速度。我们常见的看得见摸得着的矢量场就是速度场。(如果没有特殊说明,下面的矢量场都当做速度场来看吧)

矢量场的绘制方法

大概有四种方法来绘制矢量场。

方法1:标量法。一个矢量有两个分量,分别按标量场的方法画两张图即可(也就是用两张图来代表一个矢量场)。可以按水平、竖直分量画,也可以按模、方向分量画。只不过看起来不太直观。

一个矢量有水平方向和竖直方向两个分量,每个分量当成一个标量场来画。比如从上图可以看出:u=-y,v=x。

一个矢量还可以由它的模和方向来确定。比如位于(0,-2)这个点的矢量的模是蓝色的(标尺上蓝色对应着2),方向是蓝绿色的(标尺上蓝绿色对应0)。也就是说在(0,-2)这个点有一个模为2、方向水平向右的一个矢量。顺带一说,上图的右边那个图里面的等色线也叫等倾线。等倾线上的矢量的方向都是相同的。再顺带一说,这画的还是u=-y,v=x。

方法2:箭头法。既然每个位置都有个矢量,那我就画个矢量。这下满地都是箭头,这样就比较直观了。大多数矢量场都是这么画的。

还是刚才的u=-y,v=x。如果你刚才一脸懵逼的话,看到这个图就会觉得很直观了。不过这里的矢量都不是按照正确的长度来画的。你看位于(0,-2)的矢量,它的长度应该是2,理论上这个矢量的终点应该画在(2,-2)那里,也就是右下角那儿,有那么长。如果每个矢量都按照正确的长度画,整个画面就是一团糊了。我们不得不按照比例缩小长度作画,而且为了画面相对干净整洁,箭头的密度也不能过大,数量不能过多。

方法3:流线法。刚才那一堆箭头,总有一种连成曲线的感觉。如果有那么一条线,线上的每个点的矢量方向都是切线方向,那么这条线就是流线。把众多流线画出来的图像,就像是众多粒子的移动轨迹。最开始的那个圆柱绕流流场就是用的流线法绘制的。不同的速度用不同的颜色区分,这样能显示更多的信息。

图片来源(网站抽风了,上图的粒子都是一个颜色) https://anvaka.github.io/fieldplay/ 这是一个显示流场的网站,你可以在里面输入你的函数,得到各种各样的图像。此图表达式为u=cos(2xy),v=y。

方法4:变换法。将一张图片的每个像素按照它自己的矢量移动到矢量末端,相当于对图像做一次变换。对于位移场,我们喜欢用变换法来显示图像。

这个L形状的物体因为受力发生了变形,每个点都发生了位移。左图是用的箭头法绘出的位移矢量场,右图就是用变换法画出的同一个矢量场。

注意,这里的位移场跟上一期讲到的变换是有区别的。上一期的变换,函数的因变量是变换后的位置;而这里的位移场,函数的因变量是位移。变换后的位置=变换前的位置+位移。如果位移场是u=0,v=0,那么此时的变换应该是x'=x,y'=y。

接下来我来讨论一类非常重要的矢量场——

线性矢量场

一个矢量场是线性矢量场(括弧:我定义的),如果组成它的两个函数u(x,y),v(x,y)是线性函数。

线性矢量场的一般表达式,a和b都是参数,取不同的a,b就能得到不同的线性矢量场。

上面的表达式是非齐次的(b不等于0),实际上我们可以通过坐标平移得到b等于0的矢量场。因为平移只改变位置,不改变形状,我现在只想关心形状,因此我们重点考虑齐次线性矢量场。(后面全是讨论齐次的,因此省略齐次二字)

比如u=-y,v=x它就是一个线性矢量场。

因为u,v是随x,y线性变化的,所以在图上任意画一条直线(比如你随便挑一条网格线),直线上的向量的终端总是连成直线。或者你在直线上均匀地点上几个点,点上的向量排成了一个"等差向量序列"。

线性矢量场举例。图中的蓝色曲线是流线。橙色直线是特征线(系数矩阵的特征向量所在直线)。上图的流线都形似双曲线和抛物线,谁来验证一下看是不是。

但是流线为啥不是直线呢?要是一条直线该多好(好个屁)。流线实际上是一条积分出来的曲线,线性的东西积分不就变成二次曲线了嘛。就好像2x积分就变成x²一样。(误)

线性矢量场举例。大家随便欣赏一下就行。不过这回好像就没有特征线在图里了哎。

表达式如此简单的线性矢量场居然能展现出这么多形态各异的图像,而且这些图像还挺好看的,确实让人惊叹不已。(文末给出了所有类型的线性矢量场的动画)

矢量场的局部

令人期待的时刻到了,矢量场的局部会是什么样子的呢?

当放大一个矢量场时,似乎所有的矢量都变成了一样的,因为矢量场是连续的,相邻两个矢量差别当然很小。其实这些矢量具体朝哪儿、大小是多少我根本不关心,我只关心它们之间的差别(difference)。以画面中心的那个向量为基准,周围的向量跟它做差,得到差向量(du,dv)(实际上就是(△u,△v)的意思)。在这一邻域内的差向量场满足一个神奇的性质,他们是线性矢量场。也就是说(du,dv)与(dx,dy)满足

事实上,u的全微分du=∂u/∂x*dx+∂u/∂y*dy,v的全微分dv=∂v/∂x*dx+∂v/∂y*dy。两个合一块就是矢量场(u,v)的全微分了。

我们把那四个偏导数组成的矩阵叫作雅克比矩阵,记作[J]。

雅克比矩阵

想象一个矢量场,位于原点的矢量(叫作移动前)如上图所示。在原点附近的A点也有一个矢量(叫作移动后),这两个矢量因为起点的不同会有略微的差异,这个差异我们用差向量来表示。A点在不同的位置,差向量会有所不同,而它们满足的关系正是图中右下方的表达式。这里A点的坐标就相当于(dx,dy),差向量就相当于(du,dv)

你有没有发现,当A点从原点水平向右移动时,差向量是沿着向量(0.87,-0.50)的方向增加的。差向量的长度跟移动的距离成正比,比例系数正好是(0.87,-0.50)这个向量的模。其实这里的0.87就是∂u/∂x,而-0.50就是∂v/∂x。这正是雅克比矩阵的第一个列向量。相应的,A点沿着y方向移动,能得到雅克比矩阵的第二个列向量。这就是雅克比矩阵列向量的几何意义。

矢量场的全微分描述了在这一点局部的流动形态。而雅克比矩阵告诉了我们在这一点流场的流动形态最接近哪种线性矢量场。

我刚才也给大家看了几个线性矢量场,可见对于线性矢量场,它的图像仍然很复杂,流动形态仍然复杂多样。毕竟一个雅克比矩阵里有四个数呀。这四个数也组成了这一流动形态的两个特别的列向量,这两个向量最终掌控着流动形态。

既然我们能把一种运动分解成几个分量来研究,就像平抛运动,一个方向是匀速运动,另一个方向是匀加速运动。那么我们能不能把一个流动形态分解成一些简单的“分量”呢?

旋度的几何意义

答案是可以的。在线性矢量场中,我们似乎能隐约观察出一些基本的流动形态,比如旋转,放缩,变形等等。我们试图将他们挖掘出来。在初学线性代数的时候,你一定会接触这样一道题,一个方阵可以拆分为一个对称矩阵和一个反对称矩阵的和。我们将雅克比矩阵做这样的拆分。

Math has a tendency to reward you when you respect its symmetry(摘自3b1b中的一句话)。我们来看比较简单的那一部分,反对称的那一个。它所表示的矢量场是这样的。

嘿!你们觉不觉得在哪儿见过这个式子?

如果ω=1的话,这个矢量场上面展示过,是一个绕着原点逆时针旋转的样子。现在把1换成ω只不过是把所有的矢量拉伸成原来的ω倍而已。可以验证每个点矢量的方向与该点到原点的连线方向垂直(也就是(u,v)点乘(x,y)等于0);而且每个点的矢量的模都是跟该点到原点的距离成正比(比例系数为ω)。这样一来,这个矢量场就好比一个圆盘绕着原点旋转,圆盘上每个点的速度矢量组成的速度场。而且转动的角速度正好是ω。我们把角速度的两倍(2ω)也就是∂v/∂x-∂u/∂y叫作旋度,代表某一点的旋转程度。这就是旋度的几何意义。

一个矢量场的旋度分布。红色表示旋度大于0(逆时针旋转),蓝色表示小于0(顺时针旋转)

教科书上介绍旋度是用的环路积分,那我们也来算一个环路积分吧。

想象(u,v)不再是速度而是力,沿着单位圆逆时针走一圈,力场做的功W是多少?显然是W=F*L=ωr*2πr,这里的ω=1,r=1。事实上在线性矢量场里,环路积分W是跟环路所包围的面积S成正比的,而这个比例系数就是旋度。W/S= (ωr*2πr)/(πr²) =2ω。

散度的几何意义

我们再来看对称的那个矩阵。它还不够对称,我们再来拆分一下。

实际上就是把一个对称矩阵拆分成一个迹为0的对称矩阵和一个对角元素都相等的对角矩阵。如果这个矩阵代表的是应力张量的话,这个拆分实际上就是把应力张量拆分成球形张量(对角元素都相等的对角矩阵)和偏斜张量(迹为0的对称矩阵)。

看看右边那个矩阵所代表的矢量场是什么?

这个想象起来应该就很简单了。某一点的矢量就是这点位置矢量乘以一个数。它大概长下面这个样子。

如果σ>0,就有一种向外放射的感觉;如果σ<0,就是向里收缩。

用变换法来显示矢量场,就更有意思了。这种矢量场似乎代表了一种图像的等比放缩。

如果σ变大一点,那么上面的图像播放快一点就行了。图像的边长扩大到原来的e倍要花1/σ的时间。

简单说一下为什么:u=σx也就是dx/dt=σx,我们可以直接算出积分曲线来。(C是积分常数)

σ代表了图像的缩放速度。我们把2σ也就是∂u/∂x+∂v/∂y叫作散度。

一个矢量场的散度分布。红色表示散度大于0(向外扩张),蓝色表示小于0(向里收缩)。

我们再从通量的角度,理解一下散度。求下面圆圈的通量积分。(向圆圈外的方向为正向)

通量Φ=v*L=σr*2πr。这里的σ=1,r=1。事实上在线性矢量场里,通量积分Φ是跟曲线所围的面积S成正比的,而这个比例系数就是散度。Φ/S= (σr*2πr)/(πr²) =2σ。在单位时间内膨胀的面积等于原来面积的2σ倍,这就是散度的几何意义。

形状改变的速率

我们一开始把雅克比矩阵拆分成了三个部分,现在还剩下一个迹为0的对称矩阵。

它的主对角线两个元素互为相反数,次对角线两个数相同。而且两个列向量是互相垂直的。如果这个矩阵乘上一个合适的数让列向量的模为1,那它就是正交矩阵了。事实上我们总能找到一个R和θ使得下面的矩阵等于上面的矩阵。

它所表示的矢量场是这个样子的:

这是θ取不同数值的时候画的动画。

可以发现它是一个方向压缩(压缩速率为R),一个方向拉伸(拉伸速率为R),从而使流体微团发生变形。

到此,我们把微观下的矢量场(当然也可以说是线性矢量场)划分成了三个分量:旋转、放缩和变形。

微观下的差向量(上)可以分解成旋转(下左)、放缩(下中)、变形(下右)这三个分量。

b站:unidentified2015        微信公众号:unidentified2016        原创文章

本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。https://creativecommons.org/licenses/by-nc-sa/4.0/

版权所有,侵权必究!

上面是把线性矢量场的系数矩阵进行拆分来进行探讨的。实际上我们还可以通过讨论系数矩阵的特征值来研究线性矢量场。假设矢量场为u=ax+by, v=cx+dy。那么系数矩阵就是[a, b; c, d],来求一求它的特征值。首先写出它的特征多项式det(系数矩阵-λI)等于0,也就是λ²-(a+d)λ+ad-bc=0。恰好a+d是矩阵的迹(记作Tr),ad-bc是行列式(记作Det)。这是一个二次方程,根的判别式△=Tr²-4Det。我们把曲线Tr²-4Det=0画在下图中。观察图像。(如果你学过“常微分方程”这门课,你一定会喜欢上这个图的。(雾))

如果上面的矢量场代表的是相位流(phase flow)根据特征值可以将原点这个平衡点的类型划分为中心(轨迹为同心圆)、焦点(轨迹为螺旋线)、结点(轨迹类似抛物线)、鞍点(轨迹类似双曲线)。

完结(或许吧?)