我可以在Sagemath中创建“抽象”张量吗?

时间:2019-04-09 14:51:08

标签: symbolic-math tensor sage

例如,我想采用一种形式的外部导数,而不指定系数。例如,如果我有一个表单

a = fdz + gdx + hdy

如何在不告诉Sage确切的f,g和h的情况下,根据f_x,f_y等来计算da?

我尝试在Sage网站的差分形式和张量部分中进行查找,但没有找到任何东西。

1 个答案:

答案 0 :(得分:1)

显然这是可行的,但可能有限(当前实用程序)。

sage: U = Manifold(3, 'U')
sage: X.<x,y,z> = U.chart()
sage: f = U.diff_form(2, 'f')
sage: f
2-form f on the 3-dimensional differentiable manifold U
sage: f.exterior_derivative()
3-form df on the 3-dimensional differentiable manifold U

所以至少有抽象的。但是

sage: f.components()
...
ValueError: no basis could be found for computing the components in the Coordinate frame (U, (d/dx,d/dy,d/dz))

但是,我认为可以通过定义三个变量的抽象函数来解决此问题。无法保证这是否100%准确,因为“ chart”变量与其他符号变量之间的关系对我来说并不明确-我使用SageManifolds的次数很少。

sage: pbi = function('pbi', nargs=3)(x,y,z); pbi
pbi(x, y, z)
sage: type(pbi)
<type 'sage.symbolic.expression.Expression'>
sage: f[0,1]=pbi
sage: f
2-form f on the 3-dimensional differentiable manifold U
sage: f.components()
Fully antisymmetric 2-indices components w.r.t. Coordinate frame (U, (d/dx,d/dy,d/dz))
sage: f.display()
f = pbi(x, y, z) dx/\dy
sage: f.exterior_derivative()
3-form df on the 3-dimensional differentiable manifold U
sage: f.exterior_derivative().components()
Fully antisymmetric 3-indices components w.r.t. Coordinate frame (U, (d/dx,d/dy,d/dz))
sage: f.exterior_derivative().display()
df = d(pbi)/dz dx/\dy/\dz
sage: f[1,2]=pbi^2
sage: f.exterior_derivative().display()
df = (2*pbi(x, y, z)*d(pbi)/dx + d(pbi)/dz) dx/\dy/\dz

如果这些计算是您期望的,那么我猜您可以使用它们。快速浏览一下就可以看出至少+/-是正确的。

sage: g = U.diff_form(1, 'g')
sage: g[:] = (pbi,pbi^2,pbi^3)
sage: g.display()
g = pbi(x, y, z) dx + pbi(x, y, z)^2 dy + pbi(x, y, z)^3 dz
sage: g.exterior_derivative().display()
dg = (2*pbi(x, y, z)*d(pbi)/dx - d(pbi)/dy) dx/\dy + (3*pbi(x, y, z)^2*d(pbi)/dx - d(pbi)/dz) dx/\dz + (3*pbi(x, y, z)^2*d(pbi)/dy - 2*pbi(x, y, z)*d(pbi)/dz) dy/\dz

除了您已经提到的文档之外,总体上还有很多示例,请参见here(但仅涉及流形版本,不推荐使用另一个版本)。