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

标签 python sympy

我试图使用我自己的示例来遵循 sympy.diffgeom 中的文档。我没有使用笛卡尔坐标和极坐标,而是尝试使用笛卡尔坐标和环形坐标。

这是我在 ipython session 中的代码:

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)

关于python - 使用 sympy.diffgeom.CoordSystem 连接两个坐标系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32886501/

相关文章:

python - 如何确定字符串是否转义为unicode

python - 求解指数方程给出多个解

python - 矩阵和标量符号的混合

python - Windows 10 Ubuntu 外壳 "CUDA driver version is insufficient"

python - 对 pandas 中具有重复索引的数据框应用滚动平均函数

python - 如何扩展sympy中的Symbol类?

python - 羔羊化 : Allow limited flexibility in variable names in user defined functions

python - 使用 SymPy 的求解函数反汇编 Python 程序(幕后发生了什么?)

python - 为什么我不能用单行条件来中断?

python - 有效地找到由 numpy 数组的索引分割的子数组的 cumsum