Python 3.x 如何设置Symphy以执行标准微分几何任务?
我是一名工科学生。几乎所有我要做的数学都是R2或R3中的一些东西,涉及微分几何。当然,我真的很喜欢sympy,因为它使我的计算可以重复使用,并且可以展示 我发现: 在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
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已经提供的主干来写这篇文章
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。例如,上面链接的博客文章有一个例子,其中导出了一个简单的黑洞度量。