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