Есть ли способ работы в сферических координатах в SymPy? - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю в сценарии для выполнения аналитических расчетов в Python. Для этого мне понадобится векторное представление моих параметров, а также некоторые базовые векторные операции, такие как Gradient и Divergence, и по этой причине я начал работать в SymPy. Однако я заметил, что нет простого способа работы в сферических координатах.

После прочтения документации я обнаружил, что картезианскую среду можно просто определить как

from sympy.vector import CoordSys3D

N = CoordSys3D('N')

и сразу начать работать с унитарными декартовыми унитарными векторами i, j, k

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

Есть ли способ инициализации такой среды для сферических координат, где у меня есть доступ к радиальным, тета и фи унитарным векторам и, следовательно, к основанию c векторные операции выполняются соответственно? Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

После некоторого чтения я обнаружил, что переменные новой базы можно определить с помощью variable_names(), а унитарные векторы новой базы - как vector_names()

Таким образом, полное определение сферической системы координат будет be

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

Теперь унитарные векторы уважают правильные соотношения, например,

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

, где & обозначает точечное произведение и ^ для перекрестного произведения

0 голосов
/ 08 апреля 2020

Вы можете получить доступ к сферическим координатным унитарным векторам как 'r', 't', 'p' (или вы можете использовать полные имена, такие как 'radius', 'theta', 'phi') вместо 'i', 'j ',,' k ', если вы указываете, что преобразование является «сферическим»:

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