2017-10-10 7 views
3

Mon objectif principal est d'identifier les coefficients devant exponentielles de la formesympy - comment combiner additivement les exposants lors de l'expansion?

exp(1j*k*r) 

dans des expressions telles que:

(z1*exp(1j*k1*r1) + z2*exp(1j*k2*r2) + c.c.)**2 

par la première expansion, puis en utilisant l'outil coeff dans sympy. Le problème est que je ne sais pas comment développer de telle manière que nous pouvons rassembler les exposants de façon additive. Je voudrais voir ce terme:

exp(1j*(k1*r1+k2*r2)) 

mais seulement ce genre de terme apparaît:

exp(1j*k1*r1)*exp(1j*k2*r2) 

Voici mon code:

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) 

Je ne peux pas comprendre comment faire il. J'ai essayé d'utiliser simplifier, ou considérer la chose comme un polynôme avec des coefficients symboliques, mais cela n'a pas fonctionné.

Plus généralement, est l'expansion, puis en utilisant la méthode coeff la meilleure façon d'extraire des coefficients en face des exponentielles? Y a-t-il un outil automatisé qui le fait déjà?

Nous vous remercions de votre aide!

EDIT:

J'ai aussi essayé d'utiliser powsimp avec cette partie de code:

w = powsimp(expand(u**2)) 
print(w.coeff(exp(1j*(k1*r1 + k2*r2)))) 

retourne 0 parce que nous obtenons seulement

exp(1j*k1*r1 + 1j*k2*r2) 

, mais il ne suffit pas lors de l'application coeff méthode pour extraire l'exposant 1j * (k1 * r1 + k2 * r2).

Répondre

0

La fonction factor_terms explore les exposants et met à nu le facteur commun. Est-ce ce que vous recherchez?

>>> factor_terms(powsimp(posify(u**2)[0].expand())) 
z1∗∗2∗exp(2∗k1∗r1∗I)+2∗z1∗∗2+z1∗∗2∗exp(−2∗k1∗r1∗I)+ 
2∗z1∗z2∗exp(k1∗I∗(−r1+r2))+2∗z1∗z2∗exp(k1∗I∗(r1−r2))+ 
2∗z1∗z2∗exp(k1∗I∗(r1+r2))+2∗z1∗z2∗exp(−k1∗I∗(r1+r2))+ 
z2∗∗2∗exp(2∗k1∗r2∗I)+2∗z2∗∗2+z2∗∗2∗exp(−2∗k1∗r2∗I) 

Le posify attribue des hypothèses pour que les facteurs exponentiels se rejoignent. Si ce n'est pas le cas lorsque vous utilisez powsimp c'est probablement parce qu'il y a une hypothèse qui ne permet pas de réécrire toutes les valeurs possibles des variables. Remarque: vous ne serez pas en mesure de faire correspondre directement sur ceci, vous devrez replacer vos variables originales dans le résultat en utilisant le deuxième argument qui revient de posify - voir la docstring de posify.