【问题标题】:Is there a way of working in spherical coordinates in SymPy?在 SymPy 中有没有一种在球坐标中工作的方法?
【发布时间】:2020-07-20 20:36:52
【问题描述】:

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

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

from sympy.vector import CoordSys3D

N = CoordSys3D('N')

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

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

有没有什么方法可以为球坐标初始化这样的环境,我可以访问径向、theta 和 phi 酉矢量,从而相应地完成基本矢量操作? 提前非常感谢您!

【问题讨论】:

    标签: python vector sympy spherical-coordinate


    【解决方案1】:

    您可以使用“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
    

    【讨论】:

    • 太棒了!但是,此坐标描述中的基本操作似乎并没有按应有的方式工作。一个简单的例子,我希望P.r * P.t = P.p 但是,事实并非如此。以及如何访问参数“radius”、“theta”和“phi”本身,而不仅仅是单一向量...?
    • 开始阅读的好地方是 CoordSys3D 文档字符串,然后是该函数的测试文件。恐怕我们接近在同一页面上,我不会有太多要补充的。还有 diffgeom 模块可能会有所帮助。
    【解决方案2】:

    经过一番阅读,我发现可以定义新基的变量 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
    

    & 代表点积,^ 代表叉积

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-15
      • 2014-02-05
      • 2019-02-17
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多