Моя основная цель - определить коэффициенты перед экспонентами формы
exp(1j*k*r)
в таких выражениях, как:
(z1*exp(1j*k1*r1) + z2*exp(1j*k2*r2) + c.c.)**2
сначала расширив, а затем используя инструмент coeff в sympy.
Проблема в том, что я не знаю, как расширить таким образом, чтобы мы могли аддитивно собирать показатели. Я хотел бы видеть этот термин:
exp(1j*(k1*r1+k2*r2))
но появляется только такой термин:
exp(1j*k1*r1)*exp(1j*k2*r2)
Вот мой код:
from sympy import *
u = Symbol('u')
r1,r2 = symbols('r1 r2', real = True)
k1,k2 = symbols('k1 k2', real = True)
z1,z2 = symbols('z1 z2')
uu = z1*exp(1j*k1*r1)+ z2*exp(1j*k1*r2)
u = uu + uu.conjugate()
v = expand(u**2)
print(v)
Я не могу понять, как это сделать. Я пытался использовать упрощение или рассматривать это как многочлен с символическими коэффициентами, но это не сработало.
В более общем смысле, является ли расширение, а затем использование метода coeff лучшим способом извлечения коэффициентов перед экспонентами? Есть ли автоматизированный инструмент, который уже делает это?
Спасибо за помощь !
РЕДАКТИРОВАТЬ :
Я также пытался использовать powsimp с этой частью кода:
w = powsimp(expand(u**2))
print(w.coeff(exp(1j*(k1*r1 + k2*r2))))
он возвращает 0, потому что мы получаем только
exp(1j*k1*r1 + 1j*k2*r2)
но этого недостаточно при применении метода coeff для извлечения показателя степени 1j*(k1*r1 + k2*r2).