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

Using sympy.diffgeom.CoordSystem to connect two coordinate systems

我试图按照 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))])

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

尝试将 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)