我试图使用我自己的例子来关注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))])
当我尝试在这里执行最后一行时,代码只是无休止地运行。 为什么这不起作用?
答案 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)