有没有一种方法可以在 SymPy 中使用球坐标?

Is there a way of working in spherical coordinates in SymPy?

我正在使用脚本在 Python 中进行分析计算。为此,我需要我的参数的向量表示以及一些基本的向量操作,例如梯度和发散,因此我开始在 SymPy 中工作。但是,我注意到在球坐标中没有直接的工作方式。

阅读文档后我发现笛卡尔环境可以简单定义为

from sympy.vector import CoordSys3D

N = CoordSys3D('N')

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

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

有没有什么方法可以初始化这样一个球坐标环境,我可以在其中访问径向、theta 和 phi 酉向量,从而相应地完成基本向量运算? 非常感谢您!

您可以通过 'r'、't'、'p' 访问球坐标酉向量(或者您可以使用 'radius'、'theta'、 'phi') 而不是 'i', 'j', ,'k' 如果您指出转换是 'spherical':

>>> 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

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