最近要在曲线标架下做点计算。


(相关资料图)

张量运算太复杂了,手算是不可能手算的。一眼望去,MMA著名的张量计算包xAct也好复杂。帖子[1]提到了OGRe包,看起来语法还比较容易;包的文档写的也比较清楚。于是做一些测试,感受一下OGRe计算张量时语法的特点。

OGRe包的安装

利用命令找到默认路径,将OGRe.m[2,3]文件复制到对应文件夹中

导入OGRe包

查看包中的函数

文档介绍这些函数时分为几个章节:

Creating and displaying tensor objects(主要介绍坐标系、度量、张量的定义等)

Operations on single tensors(介绍张量的输出、在不同标架下转换、化简等)

Calculations with tensors(介绍利用TCalc进行张量运算等)

Derivatives and curvature tensors(介绍曲线标架下的张量运算等)

Curves and geodesics(介绍测地线等)

查看包中的默认参数

一般通过TSet开头的指令更改这些默认参数。

测试1:斜坐标系下的度量

定义笛卡尔系和斜坐标系,在笛卡尔系中定义度量张量。

OGRe中可以自动处理张量在不同坐标系下的变换,只要定义了坐标系的转换关系,可以获得度量张量在任意坐标系下的表示。

定义笛卡尔坐标系,斜坐标系以及两者的变换关系

必须定义坐标系对应的双射。如果只定义"Cartesian" -> "Oblique",在笛卡尔系下定义的张量可以转换到斜坐标系下,而在斜坐标系下定义的张量不能转换到笛卡尔坐标系中表示。

查看Jacobian矩阵

定义度量(张量)

查看度量张量的默认信息

张量的主要信息有:

ID(当允许重写权限关闭时,只有ID为Result的张量可以被重写)

Symbol(ID是唯一的,而Symbol不是唯一的,也可以没有)

Default Coordinates

Default Indices(-1代表协变分量,1代表逆变分量)

查看度量张量

我们在笛卡尔系下定义了度量张量,然而也可以输出斜坐标系下的度量。同时,不仅可以查看度量的协变分量,还可以查看度量的逆变分量。我们还能通过度量张量看到协、逆变基的正交关系(这么理解也没啥大问题吧)。

上下标中的希腊字母来自于默认的IndexLetters,对于计算没有影响。

测试2:张量的计算

主要考察张量计算时,指标的顺序,指标的上下标类型。

生成张量的指标顺序应该没什么问题,上下标类型最好还是通过TInfo查看。最好用明确的定义进行运算,避免运算出错(见测试4)。

定义张量(向量)

查看张量

张量并积

指标顺序与指标出现顺序相同(可以利用左式Result指定指标顺序),指标的协变、逆变属性与原指标相同。

张量缩并

对结果简化

进行缩并运算时,不需要指定分量是协变分量还是逆变分量。OGRe会自动将哑标转换为协变、逆变对进行运算,保证计算结果满足张量性质。

张量加法

当张量的协变、逆变形式相同时,张量加法得到的分量与原来的协变、逆变形式相同;当协变、逆变形式不同时,加法得到结果与指标出现的前后顺序无关。

测试3:Eddington张量

对于重要的置换张量,考察OGRe的运算。

定义坐标系和度量

定义Eddington张量

查看Eddington张量

测试4:梯度、散度和拉普拉斯量

进一步考察OGRe对重要运算的处理。

第一个计算结果是错误的(错误是由于度量张量+克式符没有定义在球坐标系中导致的,说好的自动转换呢,超级超级巨大巨大的Bug)。

OGRe与MMA内置函数都能够计算正确的拉普拉斯量,但是得到的梯度分量是不同的,这是由于其选择的局部标架是不同的。OGRe给出的张量指标为{-1,1}(和想象的好像不太一样,所以说确认一下还是比较重要的)。

对于标架不同导致的计算结果的差异,我们自己算一下。下面前缀n的对应MMA内置函数的结果,没有前缀的代表OGRe的结果。

忽略指标的顺序(求导时MMA求导指标加在右边,OGRe求导指标加在左边),上述结果与需要对照的结果是一致的。

OGRe需要显式的定义坐标全局的映射,而不能自己定义局部的映射,这可能是OGRe包的缺点之一。

测试5:测地线

由度量计算拉格朗日量,进一步计算测地方程

定义坐标系和度量

计算测地线方程

对比MMA自带变分包计算的结果

将测地线方程改写,两者事实上是相同的

算例

在这个例子中,用OGRe给出的式子计算测地线能得到比较好的结果。MMA变分包给出的方程,方程的性质在部分情况下并不是太好。

球面上的测地线

方程不是特别好解,没有对解法进行优化。索性我们知道答案,直接带进去就好了。故技重施,把方程中的曲线参数消掉。

方程的一般解

OGRe的确给出了正确的测地方程。

在定义球面坐标系的度量时,想偷个懒,定义球面在三维笛卡尔系中的嵌入,OGRe竟然不支持。定义映射的流形必须维度一致。

1.https://zhuanlan.zhihu.com/p/570817834

2.https://github.com/bshoshany/OGRe

3.https://joss.theoj.org/papers/10.21105/joss.03416

推荐阅读

更多 >

最近更新

更多 >