Упрощение тригонометрических представлений взвешенных по спину сферических гармоник с помощью SymPy - PullRequest
0 голосов
/ 22 октября 2018

Я реализовал взвешенные по спину сферические гармоники (SWSH) в Sympy, которые дают правильные выражения, но в упрощенном виде.

Например, SWSH со спином = 0 l = 1 м= 0 содержит в себе выражение

(1/tan(0.5*th))**2.0 - 1

, которое можно легко упростить, например, в Mathematica до

cos(th)*csc(0.5*th)**2

. Я попытался воспроизвести это упрощение, используя функции Sympy, следующим образом:

  • simplify и trigsimp

  • expr.rewrite(exp).simplify().expand().rewrite(sin).simplify()

  • expr.rewrite(exp).simplify().expand().rewrite(cos).simplify()

но, к сожалению, он просто не хочет упрощаться, и я не вижу другого пути.

В конце дня я пишу функцию как сумму этихвещи, и Ineed интегрировать результат.Проблема в том, что эти выражения не упрощаются, получающаяся интеграция длинная и сложная, а интеграция занимает вечность.

Я не могу жестко закодировать выражения для SWSH, так как я использую слишком много,следовательно, я должен их вычислить.

Таким образом, если бы кто-нибудь мог привести меня к методу использования встроенных функций упрощения Sympy для упрощения этого выражения, это было бы здорово.Надеемся, что этот метод также упростит другие SWSH.

1 Ответ

0 голосов
/ 24 октября 2018

Модуль fu.py содержит несколько специализированных процедур тригонометрического преобразования.Например, TR2 преобразует tan-cot в sin-cos.

from sympy.simplify.fu import *
expr = (1/tan(th/2))**2 - 1      # no floats please, we are symbolic
e2 = TR2(expr).trigsimp()

Теперь e2 равно -2*cos(th)/(cos(th) - 1).Это больше не сумма двух слагаемых, и в ней есть cos(th);но другое дело еще не то, что вы хотели.Оказывается, трудно убедить SymPy превратить 1-cos(th) в 2*sin(th/2)**2 - возможно, это неудивительно, поскольку последний выглядит более сложным.Я получил это с

e3 = TR7(TR5(TR6(TR11(e2.subs(th, 2*th))))).subs(th, th/2)

, что приводит к cos(th)/sin(th/2)**2.Логика такова:

  1. Удвоить угол, получить -2*cos(2*th)/(cos(2*th) - 1)
  2. TR11 - уменьшить двойные углы, получить -2*(-sin(th)**2 + cos(th)**2)/(-sin(th)**2 + cos(th)**2 - 1)
  3. TR6 - степени cos к степенямгреха, получи (-2*sin(th)**2 + 1)/sin(th)**2.Это достигло желаемой формы знаменателя;осталось отменить сопутствующий ущерб числителю.
  4. TR5 - сила греха в степени cos, получить (2*cos(th)**2 - 1)/sin(th)**2
  5. TR7 - уменьшить силу cos (увеличить угол), получить cos(2*th)/sin(th)**2
  6. Половина угла, получим cos(th)/sin(th/2)**2

Шаги 4, 5, 6 по существу являются обратными 3, 2, 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...