sympy - 扩展时如何加法组合指数?
Posted
技术标签:
【中文标题】sympy - 扩展时如何加法组合指数?【英文标题】:sympy - how to additively combine exponents when expanding? 【发布时间】:2017-10-10 17:49:05 【问题描述】:我的主要目标是识别形式指数前面的系数
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)
我不知道该怎么做。我尝试使用简化,或者将其视为带有符号系数的多项式,但这不起作用。
更一般地说,扩展然后使用 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)是不够的。
【问题讨论】:
【参考方案1】:函数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
的文档字符串。
【讨论】:
以上是关于sympy - 扩展时如何加法组合指数?的主要内容,如果未能解决你的问题,请参考以下文章