我的主要目标是在形式的指数前面识别系数
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)是不够的。你知道吗
函数
factor_terms
将挖掘指数并挖掘出公因子。这就是你要找的吗?你知道吗posify
分配假设,使指数因子结合在一起。如果在使用powsimp
时它们没有这样做,那可能是因为有一个假设不允许重写所有可能的变量值。注意:您将无法直接对此进行匹配,必须使用从posify
返回的第二个参数将原始变量替换回结果中。请参见posify
的docstring。你知道吗相关问题 更多 >
编程相关推荐