Python 3.x 如何设置Symphy以执行标准微分几何任务?

Python 3.x 如何设置Symphy以执行标准微分几何任务?,python-3.x,sympy,Python 3.x,Sympy,我是一名工科学生。几乎所有我要做的数学都是R2或R3中的一些东西,涉及微分几何。当然,我真的很喜欢sympy,因为它使我的计算可以重复使用,并且可以展示 我发现: 在Symphy中,接近于我所知道的函数的东西,即标量值或向量值到标量值或向量值的映射,有一个名称并连接到一个表达式,似乎是这样的形式 functionname=sympy.Lambda(Variables in tuple, Expression) 或者作为一个例子 f=sympy.Lambda((x),x+1) 我还发现Symp

我是一名工科学生。几乎所有我要做的数学都是R2或R3中的一些东西,涉及微分几何。当然,我真的很喜欢sympy,因为它使我的计算可以重复使用,并且可以展示

我发现:

在Symphy中,接近于我所知道的函数的东西,即标量值或向量值到标量值或向量值的映射,有一个名称并连接到一个表达式,似乎是这样的形式

functionname=sympy.Lambda(Variables in tuple, Expression)
或者作为一个例子

f=sympy.Lambda((x),x+1)
我还发现Symphy有diffgeom模块,它定义流形、面片,然后可以在没有表达式或点的函数上执行一些操作。就像将坐标系中的一点转换为不同链接坐标系中的同一点一样

我还没有找到一种方法来对上述函数执行这些操作和转换。或者在diffgeom上下文中定义类似Lambda函数的内容

我想做的例子如下:

scalarfield f (x,y,z) = expression

grad (f) = ( d expression / dx , d expression / dy , d expression / dz)^T

vectorfield v (x,y,z) = ( expression 1 , expression 2 , expression 3 )^T

I'd then like to be able to integrate the vectorfield over bodies or curves.
  • 这些东西存在而我却没有找到吗
  • 我不明白diffgeom是否可行
  • 我是否需要用sympy已经提供的主干来写这篇文章

Symphy中有一个微分几何模块:

有关更多示例,请参见

要执行diffgeom模块中建议的操作,只需使用流形的基本坐标定义表达式:

from diffgeom.rn import R2
scalar = (R2.r**2 - R2.x**2 - R2.y**2) # you can mix coordinate systems
gradient = (R2.e_x + R2.e_y).rcall(scalar)
有各种改变坐标的功能,等等。可能缺少很多东西,但这需要使用情况和错误报告(以及帮助)才能实现

您可以在测试文件中看到一些其他示例:

  • 一本教科书中的测试示例
  • 更多测试
然而,对于你的问题中所建议的,通过微分几何来做(虽然可能)是一种过分的做法。您只需使用矩阵模块:

def gradient(expr, vars):
    return Matrix([expr.diff(v) for v in vars])
实现了矩阵雅可比矩阵等更奇特的东西


最后一句话:使用表达式而不是函数和lambda可能会产生更具可读性和习惯性的sympy代码(通常使用
subs
来替换符号,而不是某种闭包、lambda、函数调用等更为自然).

好的,我应该用sympy提供的工具自己构建我需要的东西。好吧出于好奇,我需要在什么样的问题上使用diffgeom模块?将它用于你的问题是非常好的,这可能是我将如何处理它的,但diffgeom有更陡峭的学习曲线,因此没有必要将它用于可以在两行矩阵上完成的事情。另一方面,对于非平凡坐标系、曲线流形、n型、积分曲线、张量和楔积等,可以直接使用diffgeom。例如,上面链接的博客文章有一个例子,其中导出了一个简单的黑洞度量。