使用sympy.diffgeom.CoordSystem连接两个坐标系

时间:2015-10-01 11:29:27

标签: python sympy

我试图使用我自己的例子来关注sympy.diffgeom中的文档。我没有使用笛卡尔坐标和极坐标,而是尝试使用笛卡尔坐标和环面坐标。

以下是来自ipython会话的代码:

from sympy.diffgeom import Manifold, Patch, CoordSystem
from sympy.abc import theta, eta, psi
import sympy as sym

x,y,z,a = sym.symbols("x y z a")
m = Manifold("M",2)
patch = Patch("P",m)

cartesian = CoordSystem("cartesian",patch)
toroidal = CoordSystem("toroidal",patch)

from sympy import sin,cos,sinh,cosh
toroidal.connect_to(cartesian,[eta,theta,psi],
[(a*sinh(eta)*cos(psi))/(cosh(eta) - cos(theta)),
 (a*sinh(eta)*sin(psi))/(cosh(eta) - cos(theta)),
 (a*sin(theta))/(cosh(eta) - cos(theta))])

当我尝试在这里执行最后一行时,代码只是无休止地运行。 为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

尝试将 inverse = False 作为参数放在 .connect_to(...)中:

toroidal.connect_to(cartesian,[eta,theta,psi],
[(a*sinh(eta)*cos(psi))/(cosh(eta) - cos(theta)),
 (a*sinh(eta)*sin(psi))/(cosh(eta) - cos(theta)),
 (a*sin(theta))/(cosh(eta) - cos(theta))], inverse=False)

SymPy的求解器很可能在反转变换方程时遇到很多困难。

如果你想使用逆变换,我建议第二次调用 .connect_to(...),手动指定逆变换:

cartesian.connect_to(toroidal, ... , ... , inverse=False)