# differential_geometry_to_vector_analysis **Repository Path**: physicsliupeng/differential_geometry_to_vector_analysis ## Basic Information - **Project Name**: differential_geometry_to_vector_analysis - **Description**: differential geometry reduced to vector analysis - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-04-18 - **Last Updated**: 2021-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 用微分几何推导矢量分析公式 ![Image](https://images.gitee.com/uploads/images/2020/0517/201837_b1761bbb_7353152.jpeg) 物理课上常用矢量分析知识,其中有些公式的推导有些繁琐。从微分几何的角度来看,大学物理中考虑的都是三维欧氏空间中的问题。所以,我们要讨论的就是三维欧氏空间中的矢量分析问题。本文就从微分几何的角度,结合程序来推导常用的几个矢量分析公式。 本文需要用到我的另两篇文章的程序和技巧: 1. [广义相对论极简张量计算程序](https://zhuanlan.zhihu.com/p/89311800) 2. [广义相对论计算中张量计算技巧](https://zhuanlan.zhihu.com/p/90775622) ## 一般坐标系 ```mathematica xx={u1, u2, u3}; g={{g11, g12, g13}, {g21, g22, g23}, {g31, g32, g33}}; ``` 作为最一般的坐标系,`gij`均为`(u1, u2, u3)`的函数。 ### 梯度 标量场$f$梯度表达式为 $\nabla f$,那么对应的一般坐标系中的微分几何的表达式为, ```mathematica D[f[u1, u2, u3], {xx}] ``` ### 散度 某矢量场$\vec A$的表达式为, ```mathematica A = {A1, A2, A3} ``` 其中`Ai`均为`(u1, u2, u3)`的函数。 此时散度的定义为 $\nabla \cdot \vec A$,在微分几何中散度的表达式为 $$\nabla_a A^a $$ 而协变导数作用于$A$的结果为, $$\nabla_a A^b = \partial_a A^a + \Gamma^{a}{}_{ab} A^b$$ 所以,用程序来计算的表达式为, ```mathematica chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *) ig = Inverse[g]; (* 度规的逆 *) daab = Transpose[D[A,{xx}] + chr.A]; Tr[daab] ``` ### 旋度 旋度的定义为 $\nabla \times \vec A$,在微分几何中散度的表达式为 $$ \varepsilon_{cab} \nabla^a A^b$$ 因为体元$\varepsilon_{cab}$的表达式为 $$(dl_1)_c \wedge (dl_2)_a \wedge (dl_3)_b = \sqrt{\det (g)} (du_1)_c \wedge (du_2)_a \wedge (du_3)_b = \sqrt{\det (g)} \hat\varepsilon_{cab}$$ 其中$\hat\varepsilon_{cab}$为 Levi Civita 符号。 所以,用程序来计算的表达式为, ```mathematica chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *) ig = Inverse[g]; (* 度规的逆 *) daab = ig.Transpose[D[A,{xx}] + chr.A]; levi = LeviCivitaTensor[3]; (* Levi Civita 张量 *) Flatten[Sqrt[g] levi,{{2,3}}].Flatten[daab] ``` ### 二阶标量导数 $\nabla^2$ 二阶标量导数的定义为 $$\nabla^2 \equiv \nabla^a \nabla_a$$ 二阶标量导数可以作用于任意张量,而作用到不同类型的张量会有不同的表达式。此处我们将用作用于标量为例作为展示,即 $$\nabla^2 f$$ ```mathematica xx = {u1, u2, u3}; chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *) ig = Inverse[g]; (* 度规的逆 *) df = D[f @@ xx, {xx}]; ddf = Transpose[D[df,{xx}] - df.chr]; Tr[ig.ddf] ``` ## 一般的正交坐标系 正交坐标系是指在该坐标系下度规的分量只有对角元非零。设坐标系为$(x_1,x_2,x_3)$,在坐标变化时相应的长度变化为, $$ dl_1 = h_1 dx_1,\;dl_2 = h_2 dx_2,\; dl_3 = h_3 dx_3 $$ 用微分几何的语言来说,就是它的度规分量为, $$\left( \begin{array}{ccc} h_1^2 & 0 & 0 \\ 0 & h_2^2 & 0 \\ 0 & 0 & h_3^2 \\ \end{array} \right)$$ 有些教科书上将$h_1, h _2, h_3$称为`拉梅系数`,并可以给出相应的矢量算符作用的公式, $$ \begin{aligned} \nabla f &={\bm{e}_{1}}\frac{1}{{{h}_{1}}}\frac{\partial f }{\partial {{u}_{1}}}+{\bm{e}_{2}}\frac{1}{{{h}_{2}}}\frac{\partial f }{\partial {{u}_{2}}}+{\bm{e}_{3}}\frac{1}{{{h}_{3}}}\frac{\partial f }{\partial {{u}_{3}}} \\ \nabla \cdot \bm{A}&=\frac{1}{{{h}_{1}}{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{1}}}({{h}_{2}}{{h}_{3}}{{A}_{1}})+\frac{\partial }{\partial {{u}_{2}}}({{h}_{3}}{{h}_{1}}{{A}_{2}})+\frac{\partial }{\partial {{u}_{3}}}({{h}_{2}}{{h}_{1}}{{A}_{3}}) \right] \\ \nabla \times \bm{A}&=\frac{{\bm{e}_{1}}}{{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{2}}}({{h}_{3}}{{A}_{3}})-\frac{\partial }{\partial {{u}_{3}}}({{h}_{2}}{{A}_{2}}) \right]+\frac{{\bm{e}_{2}}}{{{h}_{1}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{3}}}({{h}_{1}}{{A}_{1}})-\frac{\partial }{\partial {{u}_{1}}}({{h}_{3}}{{A}_{3}}) \right]\\ &+\frac{{\bm{e}_{3}}}{{{h}_{1}}{{h}_{2}}}\left[ \frac{\partial }{\partial {{u}_{1}}}({{h}_{2}}{{A}_{2}})-\frac{\partial }{\partial {{u}_{2}}}({{h}_{1}}{{A}_{1}}) \right]\\ {{\nabla }^{2}}f& =\frac{1}{{{h}_{1}}{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{1}}}\left( \frac{{{h}_{2}}{{h}_{3}}}{{{h}_{1}}}\frac{\partial f }{\partial {{u}_{1}}} \right) \right.+\frac{\partial }{\partial {{u}_{2}}}\left( \frac{{{h}_{3}}{{h}_{1}}}{{{h}_{2}}}\frac{\partial f }{\partial {{u}_{2}}} \right)\left. +\frac{\partial }{\partial {{u}_{3}}}\left( \frac{{{h}_{1}}{{h}_{2}}}{{{h}_{3}}}\frac{\partial f }{\partial {{u}_{3}}} \right) \right] \end{aligned} $$ ### 梯度 梯度的表达式为$\nabla _a f$,变换到正交归一基底$e^\mu$下的分量就是, $$ \frac{\partial u^\mu}{\partial l_\nu} \partial_{u^\mu} f $$ 而$dl_\nu = g_{\nu\mu} du^\mu$,故有对角坐标下 $$ \frac{\partial u^\mu}{\partial l_\nu} = \sqrt{g^{\mu\nu}} $$ 所以计算可以写作, ```mathematica xx = {u1, u2, u3}; g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2]; ig = Inverse[g]; Simplify[Sqrt[ig].D[f @@ xx, {xx}], Assumptions -> {h1 @@ xx > 0, h2 @@ xx > 0, h3 @@ xx > 0}] ``` 其中,`Sqrt[ig]`作用的原因是要变换到正交归一基底下的分量。后面的简化条件为`h1,h2,h3`均大于零。 输出的结果为, ![](./images/gradient.png) 可以验证它的结果和教科书上的 $$\nabla f ={\bm{e}_{1}}\frac{1}{{{h}_{1}}}\frac{\partial f }{\partial {{u}_{1}}}+{\bm{e}_{2}}\frac{1}{{{h}_{2}}}\frac{\partial f }{\partial {{u}_{2}}}+{\bm{e}_{3}}\frac{1}{{{h}_{3}}}\frac{\partial f }{\partial {{u}_{3}}}$$ 一致。 ### 散度 教科书上的公式中的$A_1, A_2, A_3$是指$\bm A$在正交归一基底下的分量。所以,对于$(u1, u2, u3)$坐标下的分量,我们需要从$A_1, A_2, A_3$变换,才可以得到对应于教科书上的公式。 ```mathematica xx = {u1, u2, u3}; g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2]; ig = Inverse[g]; A = {A1 @@ xx, A2 @@ xx, A3 @@ xx}; AA = DiagonalMatrix[1/{h1 @@ xx, h2 @@ xx, h3 @@ xx}].A; chr = ChristoffelSymbol[g, xx]; D[AA, {xx}] + chr.AA // Tr ``` 输出的结果为, ![](./images/div.png) 可以验证它的结果和教科书上的 $$\nabla \cdot \bm{A}=\frac{1}{{{h}_{1}}{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{1}}}({{h}_{2}}{{h}_{3}}{{A}_{1}})+\frac{\partial }{\partial {{u}_{2}}}({{h}_{3}}{{h}_{1}}{{A}_{2}})+\frac{\partial }{\partial {{u}_{3}}}({{h}_{2}}{{h}_{1}}{{A}_{3}}) \right] $$ 一致。 ### 旋度 ```mathematica xx = {u1, u2, u3}; g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2]; ig = Inverse[g]; chr = ChristoffelSymbol1[g, xx]; A = {A1 @@ xx, A2 @@ xx, A3 @@ xx}; daab = Transpose[D[AA, {xx}] + chr.AA]; levi = LeviCivitaTensor[3];(*Levi Civita 张量*) Simplify[ Sqrt[g].ig.Flatten[ Sqrt[Det[g]] levi, {{1}, {2, 3}} ].Flatten[ig.daab], Assumptions -> {h1 @@ xx > 0, h2 @@ xx > 0, h3 @@ xx > 0} ] // Expand ``` 其中,最后一步`ig`的作用是将对偶矢量拉升为矢量。而`Sqrt[g]`作用的原因是要变换到正交归一基底下的分量。 输出的结果为, ![](./images/curl.png) 可以验证它的结果和教科书上的 $$ \begin{aligned} \nabla \times \bm{A}&=\frac{{\bm{e}_{1}}}{{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{2}}}({{h}_{3}}{{A}_{3}})-\frac{\partial }{\partial {{u}_{3}}}({{h}_{2}}{{A}_{2}}) \right]+\frac{{\bm{e}_{2}}}{{{h}_{1}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{3}}}({{h}_{1}}{{A}_{1}})-\frac{\partial }{\partial {{u}_{1}}}({{h}_{3}}{{A}_{3}}) \right]\\ &+\frac{{\bm{e}_{3}}}{{{h}_{1}}{{h}_{2}}}\left[ \frac{\partial }{\partial {{u}_{1}}}({{h}_{2}}{{A}_{2}})-\frac{\partial }{\partial {{u}_{2}}}({{h}_{1}}{{A}_{1}}) \right] \end{aligned} $$ 一致。 ### 二阶标量导数 $\nabla^2$ ```mathematica xx = {u1, u2, u3}; chr = ChristoffelSymbol1[g, xx];(*克氏符*) ig = Inverse[g];(*度规的逆*) df = D[f @@ xx, {xx}]; ddf = D[df, {xx}] - df.chr; Tr[ig.ddf] // Expand ``` 输出的结果为, ![](./images/laplace.png) 可以验证它的结果和教科书上的 $${{\nabla }^{2}}f =\frac{1}{{{h}_{1}}{{h}_{2}}{{h}_{3}}}\left[ \frac{\partial }{\partial {{u}_{1}}}\left( \frac{{{h}_{2}}{{h}_{3}}}{{{h}_{1}}}\frac{\partial f }{\partial {{u}_{1}}} \right) \right.+\frac{\partial }{\partial {{u}_{2}}}\left( \frac{{{h}_{3}}{{h}_{1}}}{{{h}_{2}}}\frac{\partial f }{\partial {{u}_{2}}} \right)\left. +\frac{\partial }{\partial {{u}_{3}}}\left( \frac{{{h}_{1}}{{h}_{2}}}{{{h}_{3}}}\frac{\partial f }{\partial {{u}_{3}}} \right) \right]$$ 一致。 ## 常用坐标系的应用 知道了正交坐标系下的表达式后,正角坐标系、球坐标系、柱坐标系等常用的坐标系下的矢量分析表达式就可以直接用公式求解。此处不详述。