在SymPy中,有没有一种在球面坐标系中工作的方法



我正在编写一个脚本,用Python进行分析计算。为此,我需要参数的矢量表示,以及一些基本的矢量运算,如梯度和散度,因此我开始在SymPy中工作。然而,我注意到在球面坐标系中并没有一种简单的方法。

在阅读了文档后,我发现Cartessian环境可以简单地定义为

from sympy.vector import CoordSys3D
N = CoordSys3D('N')

并直接开始使用酉笛卡尔酉向量i,j,k

v = 2*N.i + 3*N.j - N.k

对于球面坐标,有没有任何方法可以初始化这样一个环境,在这里我可以访问径向、θ和φ酉向量,从而相应地进行基本向量运算?提前感谢您!

如果指示变换为"球形",则可以将球面坐标酉向量访问为"r"、"t"、"p"(或者可以使用"radius"、"theta"、"phi"等全名(,而不是"i"、"j"、"k":

>>> from sympy.vector import CoordSys3D
>>> P = CoordSys3D('P', transformation='spherical', variable_names=list('rtp'))
>>> P.r
P.r

经过一番阅读,我发现可以用variable_names()并且新基的酉向量为vector_names()

因此,球面坐标系的完整定义是

P = CoordSys3D('P', transformation='spherical',
vector_names=list('rtp'), 
variable_names=list('RTP'))

现在酉向量确实尊重正确的关系,例如

P.r & P.t = 0
P.r ^ P.t = P.p

其中&代表点积,^代表叉积

似乎没有完全实现球面变换。

我试图将球形CoordSys3D转换为笛卡尔坐标系,但我没有像预期的那样工作。

Simpy提供了功能";express";但它似乎只是在倾斜系统上工作,而不是在球面坐标上。

>>> from sympy.vector import CoordSys3D, express
>>> N = CoordSys3D('N')
>>> from sympy.abc import a
>>> M = N.orient_new_axis('M', a, N.k)
>>> v1 = 1*N.i + 1*N.j + 1*N.k
>>> express(v1, M)
(sin(a) + cos(a))*M.i + (-sin(a) + cos(a))*M.j + M.k
>>> O = N.create_new('O', transformation='spherical')
>>> express(v1, O)
O.i + O.j + O.k

我希望最后一行的输出包含来自O的球面变量('rtp'(,以及来自三角计算的更多浮点数。

我是不是错过了什么?

最新更新