[原创]关于散度(divergence)和旋度(Curl)的公式推导

Posted 无声烟雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]关于散度(divergence)和旋度(Curl)的公式推导相关的知识,希望对你有一定的参考价值。

参考3Blue1Brown这个博主的视频 Divergence and curl: The language of Maxwell\'s equations, fluid flow, and more   https://www.youtube.com/watch?v=rB83DpBJQsE   对应于B站上是   散度与旋度:麦克斯韦方程组、流体等所用到的语言    https://www.bilibili.com/video/BV19s41157Z4?from=search&seid=10139638234229273800

参考 Mu Prime Math博主视频Derivation of Divergence and Curl Formulas     https://www.youtube.com/watch?v=W--29EqUSl0&list=PLnzbcxOfybFpfV5FQkUxvesqi4k75xNQV&index=17  bilibili上有生肉,要是能联系到博主本人还请私信我

参考文章  https://sites.google.com/site/butwhymath/calculus/divergence   跟之前一样同一个系列的But Why? Intuitive Mathematics,已经搬运到了本博客 

 

 

好,咱们言归正传~

 

 关于散度divergence的计算

散度divergence在Thomas Caclulus(第14版)中是这样定义的 

16.4节

 

16.8节

 

为什么这样算出来的数值叫做散度divergence?为什么不是定义成别的计算方法算出来的一个量称之为散度?“散度”这个词本身也很奇怪,分散的程度?散开的程度?

divergence这个量是想描述某个点的净流出或者净流入,比如如果水池里有个洞一直在往下漏水,那么如果围绕这个洞画个圈,这个圈圈的净流出就是负的。如果水池里有个喷泉,那么围绕这个泉眼画一个圈,那么这个圈圈的净流出就是正的。当然正负也可以反过来,都是人为的规定罢了。如果这个洞或者泉眼很小,围绕着这个洞的圈圈也很小,有多小呢——正如当年高中物理老师跟我们描述的:很小很小,要多小有多小,比你想象还要小——那么就可以抽象成一个点,那么刚才那个圈圈的净流入或者净流出就是这个点的净流入或者净流出。

 

围绕着这个点的圈圈的形状不影响这个点的净流出和净流入,所以圈圈可以是各种形状

为了计算方便,我们采用一种比较规则的形状:正方形的圈圈, 计算流过这个圈圈的净流出或者净流入

流体的流动可以用向量场来描述。

 我们可以把向量场分解成垂直于正方形圈圈的量和平行于正方形圈圈的量,平行于正方形圈圈的量对于净流入或者净流出没有贡献,可以忽略掉,所以计算该正方形圈圈的净流量是找到垂直于各个边的量,并沿着各个边做积分(其实就是累加啦)

 为了描述方便,加上一些标记和字母,正方形边框边长为2h,向量$ \\vec{n} $是垂直于边并指向外的向量。假设在该平面中存在向量场$ \\vec{F} $ =(P,Q),P和Q都是坐标x和y的函数,换句话说就是P的值随着x和y的变化而变化,Q的值随着x和y的变化而变化。那么这个圈圈的净流入或者净流出就是 $  \\int \\vec{F}\\cdot \\vec{n} $,我们可以计算每条边上$ \\vec{F}\\cdot \\vec{n} $的值然后累加起来。下面我们先计算BC边上$ \\vec{F}\\cdot \\vec{n} $的值 

 

 在计算之前,先说明一些计算假设。因为圈圈所框选的范围很小,因此认为在该范围内向量场的变化都是线性变化的,假设M点坐标为(x,y),那么P随着x的变化速率是 $ \\frac{\\partial P}{\\partial x} $简写做Px,P随着y的变化速率是$  \\frac{\\partial P}{\\partial y} $,简写作Py,Q随着x的变化速率是$ \\frac{\\partial Q}{\\partial x} $,简写作Qx,Q随着y的变化速率是$ \\frac{\\partial Q}{\\partial y} $,简写作Qy

假设中心点M处的向量强度为P(M)=(P0,Q0)。那么BC边中点处(命名为点N)的向量x方向的分量为P(N)=P0+h*Px因为在BC边上向量场F的y分量没有影响,所以忽略不去计算。

 沿着BC边向上或者向下,向量场随着y的变化率为P(N)对于y求偏导$  \\partial P(N))/\\partial y $,可以记作P(N)y。那么B处的向量场x方向的分量大小为  P0+h*Px+h*P(N)y ,同理C处的向量场x方向分量大小为 P0+h*Px-h*P(N)y ,上下两边正好对称,在计算积分的时候会相互抵消掉,所以我们可以用BC中心点向量场x方向的分量来对整条BC线做积分。

 

 

那么向量场在BC上的积分$  \\int \\vec{F}\\cdot \\vec{n} $=(P0+h*Px)*2h,即为x方向的分量乘以边长

同样的,在AD边中点处x方向的分量是$ \\binom{P0-h*Px}{0} $, AD边上的向量$  \\vec {n} $是$  \\binom{-2h}{0} $,点乘积为(P0-h*Px)*(-2h)

AD BC两条边的积分和加在一起是4h2Px中心点处的向量场强度大小其实并不影响,因此可以在一开始计算时假定中心点的向量场强度为0.

同理,计算上下两边的积分结果是4h2Qy
所以对于该正方形边框来说, $  \\int \\vec{F}\\cdot \\vec{n} $=4h2Px+4h2Qy=4h2(Px+Qy)

即为$  \\int \\vec{F}\\cdot \\vec{n} $=4h2 * ($ \\frac{\\partial P}{\\partial x} $+$ \\frac{\\partial Q}{\\partial y} $) 

 那么单位面积上的净流出或者净流入为$ \\frac{1}{4h^{2}}\\int \\vec{F}\\cdot \\vec{n}  $=$ \\frac{\\partial P}{\\partial x} $+$ \\frac{\\partial Q}{\\partial y} $,这个公式就是divergence的定义。

对于三维空间中的点divergence的计算,请参考 https://sites.google.com/site/butwhymath/calculus/divergence ,已经搬运到了我的博客,计算思路类似。

 

 

 关于旋度curl的计算

请参考 Khan Academy  https://www.khanacademy.org/math/multivariable-calculus/multivariable-derivatives/curl-grant-videos/v/3d-curl-intuition-part-1这一系列视频,每个只有5分钟比较短。网易公开课有搬运过来的https://open.163.com/newview/movie/free?pid=GEUPLRLAQ&mid=AEUPLRNUB 课程名字为线积分示例2(第1部分)_多变量微积分_可汗学院

 

旋度(curl)在Thomas Caclulus(第14版)中是这样定义的

16.4节

 

 

16.7节

 

旋度是为了描述什么呢?旋转的程度,描述的是加入你在空间中的某个点放一个小球,这个小球会如何旋转以及旋转的速度有多大

对于旋度是如何定义的?假设在如图所示的坐标系中,从A点望向yz平面,规定逆时针方向的旋转为正。假设有一个力F沿着方框逆时针移动,那么力F沿着方框所做的功为F沿着方框每一条边上的分量乘以距离,即为$  \\vec{F}\\cdot d\\vec{r} $,其中向量$  \\vec{r} $为沿着方框边的向量,方向变化为逆时针,如图所示。

 

 

假设向量场$ \\vec{F}=\\begin{pmatrix}P &Q  &R \\end{pmatrix}  $,P、Q、R是x,y,z的函数,给定一组x,y,z的组合都有对应的P Q R值与之对应。方框中心点的向量强度为F(M)=(P0, Q0, R0),边DE的中点处N。方框是边长为2h的框,求DE边上$  \\vec{F}\\cdot d\\vec{r} $的积分。与散度的推导过程类似,因为方框所框选的面积很小,所以认为在这个范围内向量强度的变化是线性变化,沿着DE的积分,所以只需要考虑向量场z方向的分量即可。假设方框中心点处z方向分量为R,R随着y变化的变化率为$  \\frac{\\partial R}{\\partial y} $,记作Ry,那么DE中心点N处z方向的分量是R0+h*Ry与divergence的推导过程类似,因为上下对称,所以R沿着DE边的变化上下抵消,可以用N处R的大小来对DE边做积分。所以对于DE边而言,$  \\int_{DE}^{}\\vec{F}\\cdot d\\vec{r}=(R_{0}+h*Ry)*2h $

 

 同样的,对于BC边,向量场F沿着BC的分量为$  \\begin{pmatrix} 0 &0  & R_{0}-h*Ry \\end{pmatrix} $,$  \\begin{pmatrix} 0 &0  & -2h \\end{pmatrix} $, $  \\vec{F}\\cdot d\\vec{r}=(R_{0}-h*Ry)*(-2h) $。

可以发现DE和BC的积分中方框中心点的向量场强度被抵消掉了,为了后续方便,假定中心点向量场强度为(0 0 0)

对BE做积分,因为是沿着y方向的线,所以只需要考虑y方向的分量即可。向量场F的y分量Q随着z的变化速率为$ \\frac{\\partial Q}{\\partial z} $,记作Qz,那么BE边中心点y方向的分量为0+hQz=hQz,因为沿着BE的向量r为(0 -2h 0), 所以沿着BE的积分为-2h2Qz

对CD做积分,CD中心点处向量场y方向的分量为-hQz,沿着CD的向量r为(0  2h  0),所以积分为-2h2Qz

逆时针方向沿着四条边的积分为$ 4h^{2}(Q_{z}-R_{y})  $,同样的单位面积上的积分为$  [4h^{2}(R_{y}-Q_{z})]/4h^{2}=R_{y}-Q_{z} $,即为$  \\frac{\\partial R}{\\partial y}-\\frac{\\partial Q}{\\partial z} $。当面积趋近于0时,就是对应于该点处的curl。这恰好是平面上的旋度计算公式。如果在3维平面上,x方向的旋度向量为$  \\begin{bmatrix}(\\frac{\\partial R}{\\partial y}-\\frac{\\partial Q}{\\partial z})& 0  &0 \\end{bmatrix} $,该向量指向x方向,向量的大小就是旋转的快慢,旋转的方向是按照右手定则大拇指指向x正方向时四指弯曲的方向,相当于以向量所指向的方向为轴,以向量的模作为旋转的快慢。

 

以上是从x轴的A点看yz平面时计算得到的curl旋度

当从y轴看zx平面和从z轴看xy平面时,计算方法同样,计算得到的结果分别是,从y轴看zx平面时计算得到的旋度为$  \\frac{\\partial P}{\\partial z}-\\frac{\\partial R}{\\partial x} $,从z轴看xy平面时计算得到的旋度为$  \\frac{\\partial Q}{\\partial x}-\\frac{\\partial P}{\\partial y} $,那么空间上该点处的旋度为$ \\begin{bmatrix}(\\frac{\\partial R}{\\partial y}-\\frac{\\partial Q}{\\partial z})& (\\frac{\\partial P}{\\partial z}-\\frac{\\partial R}{\\partial x})  &(\\frac{\\partial Q}{\\partial x}-\\frac{\\partial P}{\\partial y}) \\end{bmatrix} $,向量指向的方向就是旋转轴,向量的模就是旋转的快慢,旋转的方向就是按照右手定则大拇指指向向量指向的方向时四指弯曲的方向。

 

 

 

 

 

 

 

以上是关于[原创]关于散度(divergence)和旋度(Curl)的公式推导的主要内容,如果未能解决你的问题,请参考以下文章

KL散度、JS散度、Wassertein距离

利用Matlab绘制梯度图散度图旋度图

矢量旋度的散度恒为零

KL散度(KL divergence, JS divergence)

静电场分析

paper 22:kl-divergence(KL散度)实现代码