Я новичок в симпатиях, поэтому, пожалуйста, не принимайте слишком много библиотечно-специфических c знаний с моей стороны.
Я интегрирую по четному домену сумму много экспоненциальных выражений, и чтобы ускорить этот процесс, я бы хотел игнорировать любые странные термины. Например, выражение
# / pi / pi / pi
# | | |
# | | | exp(-I*x1)exp(I*2*y)exp(I*5*z)
# | | | _____________________________ dx1 dy dz
# | | | 101
# | | |
# / -pi / -pi / -pi
равно 0 из-за интеграла от e ^ {i2y} по четной области (это работает для e ^ {inx} для любого четного n> 0).
Я создал несколько тысяч таких терминов и разделил их в список с помощью Add.make_args (); часть этого списка -
[exp(I*x1)/4 - 1/2 + exp(-I*x1)/4,
exp(I*x1/2)*exp(-I*y1/2)*exp(-I*z1/2)/2 + exp(-I*x1/2)*exp(I*y1/2)*exp(I*z1/2)/2]
Для отдельной функции exp () я знаю, как извлечь аргумент, используя
f = exp(I*x1)/4
print(log(numer(f)).subs(x1,1)/I)
, который печатает
1
который я могу затем проверить используя% 2 == 0. Однако я не уверен, как сканировать несколько последовательных функций exp (), каждая из которых может иметь одну из 6 различных переменных интеграции, или есть более простой способ сделать это.
Как сделать Я проверяю, является ли многомерная функция sympy нечетной, или извлекаю каждый из ее аргументов exp () для проверки?
(правка: изменил мой метод тестирования, если целое число четное; добавлен тег python)