在展开时如何将指数相加?

2024-03-29 11:16:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我的主要目标是在形式的指数前面识别系数

exp(1j*k*r)

在表达式中,例如:

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

首先展开,然后在sympy中使用coeff工具。你知道吗

问题是,我不知道如何以这样的方式展开,我们可以把指数相加。我想看看这个术语:

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)

我想不出怎么做。我试着使用simplify,或者把它看作一个带符号系数的多项式,但是这不起作用。你知道吗

更一般地说,展开然后使用系数法是提取指数前面系数的最佳方法吗?有没有什么自动化的工具已经制造出来了?你知道吗

谢谢你的帮助!你知道吗

编辑:

我还尝试在这部分代码中使用powsimp:

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

它返回0,因为我们只获得

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

但用系数法提取指数1j*(k1*r1+k2*r2)是不够的。你知道吗


Tags: 工具k2k1指数real术语r2symbols
1条回答
网友
1楼 · 发布于 2024-03-29 11:16:39

函数factor_terms将挖掘指数并挖掘出公因子。这就是你要找的吗?你知道吗

>>> 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)

posify分配假设,使指数因子结合在一起。如果在使用powsimp时它们没有这样做,那可能是因为有一个假设不允许重写所有可能的变量值。注意:您将无法直接对此进行匹配,必须使用从posify返回的第二个参数将原始变量替换回结果中。请参见posify的docstring。你知道吗

相关问题 更多 >