曲率的独立分量#

黎曼曲率张量是一个非常重要的张量,当且仅当它全部分量为0时,空间才是平直的。它也出现在爱因斯坦的场方程中。总而言之,只要涉及到黎曼几何,黎曼曲率张量就必然是核心内容。

已经看到,黎曼曲率张量有4个指标,这也意味着它有$n^4$个分量,$n$是空间的维数。那么在2、3、4维空间中,它就有16、81、256个分量了,可见,要计算它,是一件相当痛苦的事情。幸好,这个张量有很多的对称性质,使得独立分量的数目大大减少,我们来分析这一点。

首先我们来导出黎曼曲率张量的一些对称性质,这部分内容是跟经典教科书是一致的。定义

$$R_{\mu\alpha\beta\gamma}=g_{\mu\nu}R^{\nu}_{\alpha\beta\gamma} \tag{50} $$

定义这个量的原因,要谈及逆变张量和协变张量的区别,我们这里主要关心几何观,因此略过对张量的详细分析。这个量被称为完全协变的黎曼曲率张量,有时候也直接叫做黎曼曲率张量,只要不至于混淆,一般不做区分。通过略微冗长的代数运算(在一般的微分几何、黎曼几何或者广义相对论教材中都有),可以得到

$$\begin{aligned}&R_{\mu\alpha\beta\gamma}=-R_{\mu\alpha\gamma\beta}\\

&R_{\mu\alpha\beta\gamma}=-R_{\alpha\mu\beta\gamma}\\

&R_{\mu\alpha\beta\gamma}=R_{\beta\gamma\mu\alpha}\\

&R_{\mu\alpha\beta\gamma}+R_{\mu\beta\gamma\alpha}+R_{\mu\gamma\alpha\beta}=0

\end{aligned} \tag{51} $$

前两个式子很快就告诉我们,如果$\beta=\gamma$或$\mu=\alpha$,那么$R_{\mu\alpha\gamma\beta}=0$,这是反对称的结果。下面的计数表明,独立分量的数目还可以以进一步减少。我们可以将每个等式看成一个约束,有一个约束,独立分量就减少1,我们要考虑有多少个独立的约束,来得出有多少个独立分量。

首先,$R_{\mu\alpha\beta\gamma}$可以看成一个$n\times n$矩阵(前两个指标),由这个矩阵的每个元素都是一个$n\times n$矩阵(后两个指标),由$R_{\mu\alpha\beta\gamma}=-R_{\mu\alpha\gamma\beta}$可知,作为矩阵每个元素的矩阵,是一个反对称矩阵,因此只有$n(n-1)/2$个独立分量,而由$R_{\mu\alpha\beta\gamma}=-R_{\alpha\mu\beta\gamma}$知道,作为矩阵的矩阵,它也是反对称的,因此也只有$n(n-1)/2$个独立分量,也就是说,根据前两个式子就可以知道总的独立分量数不超过$[n(n-1)/2]^2$。

接着,第三、第四个约束可以为我们进一步减少分量数目。$R_{\mu\alpha\beta\gamma}=R_{\beta\gamma\mu\alpha}$表明,如果将剩下的$[n(n-1)/2]^2$个分量排成$n(n-1)/2\times n(n-1)/2$的矩阵,那么它是对称的,这时候它的独立分量数目就只有

$$\frac{1}{2}\frac{n(n-1)}{2}\left[\frac{n(n-1)}{2}+1\right] \tag{52} $$

最后一个约束$R_{\mu\alpha\beta\gamma}+R_{\mu\beta\gamma\alpha}+R_{\mu\gamma\alpha\beta}=0$是针对四个不相同指标的,因为一旦有一对相同指标,就能够转化为前三个约束的线性组合。因此,独立分量的数目还需要减少$\binom{n}{4}$:

$$\frac{1}{2}\frac{n(n-1)}{2}\left[\frac{n(n-1)}{2}+1\right]-\binom{n}{4}=\frac{n^2(n^2-1)}{12} \tag{53} $$

于是,在2、3、4、5维空间中,黎曼曲率张量的独立分量数目分别是1、6、20、50。特别地,在二维空间中(即研究三维空间中的二维曲面之时),曲率张量只有一个独立分量。

曲率张量的计算#

下述代码有误,属于SymPy的bug,已经提交给官方,请等待修正。

很遗憾,在这里我们只能略去这个曲率张量的人工计算了,对于这个曲率张量,并没有明显简单的计算方法。利用变分方法可以简化$\Gamma^{\mu}_{\alpha\beta}$的计算,进而间接简化了曲率张量的计算。而一个自上而下的简化计算方法需要用到外微分的知识,我们目前在这个系列中没有办法做到。

但在计算机方面,利用Python中的符号计算库SymPy可以帮助我们快速地计算联络系数和曲率张量。SymPy是Python的一个符号计算库,具有小巧、开源、强大等特点。当然,如果跟商业软件Mathematica相比那肯定是没法比的,但是在某些特定的方面,其实尤有过之,也就是“不胜在全、只胜在专”了。SymPy内置了专门用来处理微分几何和张量的模块,这使得它可以非常方便地计算$\Gamma_{\alpha\beta}^{\mu}$和$R_{\alpha\beta\gamma}^{\mu}$。

一个简单的代码如下:

这是以二维球面坐标为例的,其中n定义了维数,g定义了度规矩阵,如果读者要修改,只需要修改这两个参数就好。里边的x变量是坐标的集合,dx变量是微分元的集合。为了一致,这里的指标是从0开始的,也就是遍历$0\sim n-1$。得到结果是[[[0, 0], [0, -\sin(x0)\cdot \cos(x0)]], [[0, \cos(x0)/\sin(x0)], [\cos(x0)/\sin(x0), 0]]]

[[[[0, 0], [0, 0]], [[0, \sin(x0)\cdot \cdot 2], [-\sin(x0)\cdot \cdot 2, 0]]], [[[0, -1], [1, 0]], [[0, 0], [0, 0]]]]

可以看到,程序会把所有的分量都列出来,如果我们只关心非0分量,那么可以用以下代码输出:

得到Gamma^0_11: -\sin(x0)\cdot \cos(x0)

Gamma^1_01: \cos(x0)/\sin(x0)

Gamma^1_10: \cos(x0)/\sin(x0)

Riemann^0_101: \sin(x0)\cdot \cdot 2

Riemann^0_110: -\sin(x0)\cdot \cdot 2

Riemann^1_001: -1

Riemann^1_010: 1

注意,这里的曲率张量算的是$R_{\alpha\beta\gamma}^{\mu}$,如果读者关心$R_{\mu\alpha\beta\gamma}$,但SymPy并没有现成的函数,我们可以自己用张量运算库来算,即

其中tensorproduct是用来做张量积的,tensorcontraction是用来缩并的。得到[[[[0, 0], [0, 0]], [[0, \sin(x0)\cdot \cdot 2], [-\sin(x0)\cdot \cdot 2, 0]]], [[[0, -\sin(x0)\cdot \cdot 2], [\sin(x0)\cdot \cdot 2, 0]], [[0, 0], [0, 0]]]]

最后如果要输出为LaTeX代码,只需要用latex命令转就行了,比如

最后的replace是做一些简单的微调,使得结果更符合我们平时的写法,结果是Gamma^0_11: - \sin{\left ({{x_{0}}} \right )} \cos{\left ({{x_{0}}} \right )}

Gamma^1_01: \frac{\cos{\left ({{x_{0}}} \right )}}{\sin{\left ({{x_{0}}} \right )}}

Gamma^1_10: \frac{\cos{\left ({{x_{0}}} \right )}}{\sin{\left ({{x_{0}}} \right )}}

最后我们可能需要对含有待定函数的度量求曲率,比如$ds^2=f(x,y)(dx^2+dy^2)$,这时候大概的代码是:

这时候在$\Gamma_{\alpha\beta}^{\mu}$中,会出现这样的项:Subs(Derivative(f(_xi_1, x1), _xi_1), (_xi_1,), (x0,))/(2\cdot f(x0, x1))

转换为LaTeX是(跟前面一样做了一下简单的处理,替换掉boldsymbol和mathrm标签)\frac{\left. \frac{d}{d \xi_{1}} f{\left (\xi_{1},{{x_{1}}} \right )} \right|_{\substack{ \xi_{1}={{x_{0}}} }}}{2 f{\left ({{x_{0}}},{{x_{1}}} \right )}}

输出效果是

$$\frac{\left. \frac{d}{d \xi_{1}} f{\left (\xi_{1},{{x_{1}}} \right )} \right|_{\substack{ \xi_{1}={{x_{0}}} }}}{2 f{\left ({{x_{0}}},{{x_{1}}} \right )}}$$

实际上就是

$$\frac{ \frac{\partial }{\partial x_0} f\left (x_0, x_1 \right ) }{2 f{\left ({{x_{0}}},{{x_{1}}} \right )}}$$

可见,SymPy的输出还有待改善呀,很多地方还是需要人工优化一下的。更糟糕的是,$R_{\alpha\beta\gamma}^{\mu}$中出现了这样的项:-Subs(Derivative(f(_#_1(_Dummy_38), x1), _#_1(_Dummy_38), _#_1(_Dummy_38)), (_#_1(_Dummy_38),), (x0,))/f(x0, x1) - Subs(Derivative(f(x0, _#_0(_Dummy_38)), _#_0(_Dummy_38), _#_0(_Dummy_38)), (_#_0(_Dummy_38),), (x1,))/f(x0, x1) + Subs(Derivative(f(_xi_1, x1), _xi_1), (_xi_1,), (x0,))\cdot \cdot 2/(2\cdot f(x0, x1)\cdot \cdot 2) + Subs(Derivative(f(x0, _xi_2), _xi_2), (_xi_2,), (x1,))\cdot \cdot 2/(2\cdot f(x0, x1)\cdot \cdot 2)

转换为LaTeX后是- \frac{1}{f{\left ({{x_{0}}},{{x_{1}}} \right )}} \left. \frac{d^{2}}{d \operatorname{_#_{1}}{\left (Dummy_{38} \right )}^{2}} f{\left (\operatorname{_#_{1}}{\left (Dummy_{38} \right )},{{x_{1}}} \right )} \right|_{\substack{ \operatorname{_#_{1}}{\left (Dummy_{38} \right )}={{x_{0}}} }} - \frac{1}{f{\left ({{x_{0}}},{{x_{1}}} \right )}} \left. \frac{d^{2}}{d \operatorname{_#_{0}}{\left (Dummy_{38} \right )}^{2}} f{\left ({{x_{0}}},\operatorname{_#_{0}}{\left (Dummy_{38} \right )} \right )} \right|_{\substack{ \operatorname{_#_{0}}{\left (Dummy_{38} \right )}={{x_{1}}} }} + \frac{\left. \frac{d}{d \xi_{1}} f{\left (\xi_{1},{{x_{1}}} \right )} \right|_{\substack{ \xi_{1}={{x_{0}}} }}^{2}}{2 f^{2}{\left ({{x_{0}}},{{x_{1}}} \right )}} + \frac{\left. \frac{d}{d \xi_{2}} f{\left ({{x_{0}}},\xi_{2} \right )} \right|_{\substack{ \xi_{2}={{x_{1}}} }}^{2}}{2 f^{2}{\left ({{x_{0}}},{{x_{1}}} \right )}}

事实上这还会报错!这时候我们还需要把诸如\operatorname{_#_{0}}{\left (Dummy_{38} \right )}这些内容替换为普通的符号,比如

这才得到一个没报错、有点靠谱的输出:

$$\begin{aligned}&- \frac{1}{f{\left ({{x_{0}}},{{x_{1}}} \right )}} \left. \frac{d^{2}}{d \xi^{2}} f{\left (\xi,{{x_{1}}} \right )} \right|_{\substack{ \xi={{x_{0}}} }} - \frac{1}{f{\left ({{x_{0}}},{{x_{1}}} \right )}} \left. \frac{d^{2}}{d \xi^{2}} f{\left ({{x_{0}}},\xi \right )} \right|_{\substack{ \xi={{x_{1}}} }} \\

&+ \frac{\left. \frac{d}{d \xi_{1}} f{\left (\xi_{1},{{x_{1}}} \right )} \right|_{\substack{ \xi_{1}={{x_{0}}} }}^{2}}{2 f^{2}{\left ({{x_{0}}},{{x_{1}}} \right )}} + \frac{\left. \frac{d}{d \xi_{2}} f{\left ({{x_{0}}},\xi_{2} \right )} \right|_{\substack{ \xi_{2}={{x_{1}}} }}^{2}}{2 f^{2}{\left ({{x_{0}}},{{x_{1}}} \right )}}\end{aligned}$$

最后整理为

$$-\frac{\frac{\partial^2 f(x_0, x_1)}{\partial x_0^2}}{f(x_0,x_1)} -\frac{\frac{\partial^2 f(x_0, x_1)}{\partial x_1^2}}{f(x_0,x_1)} + \frac{\left(\frac{\partial f(x_0, x_1)}{\partial x_0}\right)^2}{2f^2 (x_0,x_1)} + \frac{\left(\frac{\partial f(x_0, x_1)}{\partial x_1}\right)^2}{2f^2 (x_0,x_1)}$$

或者

$$-\frac{\nabla^2 f}{f}+\frac{1}{2}\left|\frac{\nabla f}{f}\right|^2$$

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

打赏

微信打赏

支付宝打赏

因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。

如果您需要引用本文,请参考:

苏剑林. (2016, Oct 19). 《【理解黎曼几何】6. 曲率的计数与计算(Python) 》[Blog post]. Retrieved from https://www.spaces.ac.cn/archives/4026

python 几何计算_【理解黎曼几何】6. 曲率的计数与计算(Python)相关推荐

  1. python全球购代码_理解python的unicode字符串

    基于python2.7中的字符串: unicode-->编码encode('utf-8')-->写入文件 读出文件-->解码decode('utf-8')-->unicode ...

  2. python手把手入门_新手必看:手把手教你入门 Python

    首先,Python是什么?据它的创始人Guido van Rossum而言, "Python是一种高级编程语言,它的核心设计思想是代码可读性和允许程序员用几行代码来表达观点的语法." ...

  3. python 字符串操作速度_强者一出,谁与争锋?与Python相比,C+的运行速度究竟有多快?|python|编程语言|字符串|示例|算法...

    对于数据科学家而言,热爱Python的理由数不胜数.但你是否也曾问过这样的问题:Python和C或C++等更专业的低级编程语言究竟有何不同呢?我想这是很多数据科学家或者Python用户曾经问过或者将来 ...

  4. python装逼_能够让你装逼的10个Python小技巧

    列表推导式 你有一个list: bag = [1, 2, 3, 4, 5] 现在你想让所有元素翻倍,让它看起来是这个样子: [2, 4, 6, 8, 10] 大多初学者,根据之前语言的经验会大概这样来 ...

  5. python 自定义数据类型_【整理合集,建议收藏】Python数据类型(一)

    一.数据类型 在python这门语言中,数据类型分为两种. 内置的和自定义的. 内置的包括 数字 . 字符串 . 布尔 . 列表 . 元组 . 字典 . Bytes . 集合 这些常用的以 及一些不太 ...

  6. excel运行python自定义函数_终于,可以在Excel中直接使用Python!

    大家好,我是早起. 经常给大家推荐好用的数据分析工具,也收到了铁子们的各种好评.这次也不例外,我要再推荐一个,而且是个爆款神器. Excel和Jupyter Notebok都是我每天必用的工具,而且两 ...

  7. python orm库_周边生态贡献者+1,一个TDengine的Python ORM库—crown

    本文介绍了一个用于操作TDengine的 Python ORM库.本文的预期读者是,需要使用Python语言操作TDengine数据库的开发人员. 什么是ORM? ORM就是对象关系映射(Object ...

  8. python怎么认识_用“讲故事”的方式,带你认识Python编码问题的起源和发展!

    问题起源 我们在学习Python的过程中,可能会经常遇到下方这样的编码问题.有时候我们需要选择gbk,有时候需要选择utf-8.你以为这样就完了吗?我们碰到的还有gb2312,gb18030等各种奇奇 ...

  9. 420集的python教程视频_阿里达摩院推的420集的python教程高清版,据说懂中文就能入门...

    阿里达摩院推的400集的python教程高清版,据说懂中文就能入门 小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 为了 ...

最新文章

  1. linux驱动导出文件属性,linux驱动入门——模块参数和导出符号
  2. 面试必备之:MFC socket编程(浅出+深度:服务端和客户端端口问题)
  3. mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法
  4. UNIX再学习 -- 文件和目录
  5. 走近OSSIM传感器(Sensor)插件
  6. MySQL 性能调优之存储引擎
  7. Calibration: 一个工业价值极大,学术界却鲜有研究的问题!
  8. Adobe Photoshop源代码以及3800万用户信息泄漏
  9. Docker-Docker-file构建Redis5.0.3镜像
  10. Unity PointCloud开发:Mesh渲染点云
  11. java小程序实例大全_12个用Java编写基础小程序经典案例(收藏)
  12. html 限制文本框的长度,JavaScript 限制文本框输入长度(支持字符限制)
  13. 科宇扫地机器人_扫地谁更精准更干净?新一代3D视讯+激光成像 PK 老式激光扫描...
  14. ROS下调用笔记本自带摄像头
  15. 《机器学习—李宏毅》HW1
  16. (二)什么是IT售前?为什么需要IT售前?
  17. 怎么把视频语音转换成文字呢?
  18. 分布式系统之-我的书单
  19. centos安装mysql_centos如何安装mysql
  20. 维度数据建模的概念和术语

热门文章

  1. Linux系统调用全过程详解
  2. HTML学生个人网站作业设计:动漫网站设计——名侦探柯南(6页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  3. 专访筷云李小军:创新是企业持续保持活力的源泉
  4. 视频格式转换软件 XMedia Recode
  5. 基于STM32与3264点阵屏的多功能万年历
  6. openssh升级到openssh8.4
  7. RD Client 苹果手机APP由于内部错误 我们无法连接到远程网关,错误0x3000064
  8. Android的传感器应用
  9. solt插槽怎么使用
  10. arm中断保护和恢复_ARM的中断处理详细过程