Python 用辛函数化简索引指数
我试图使用Symphy来处理一些求和和和乘积,但我无法使用Symphy来简化包含索引符号的表达式 下面是一个简单的例子:Python 用辛函数化简索引指数,python,sympy,Python,Sympy,我试图使用Symphy来处理一些求和和和乘积,但我无法使用Symphy来简化包含索引符号的表达式 下面是一个简单的例子: A = symbols('A', real=True) A_i = Indexed(A, i) expr_1 = exp(-1/A)**A expr_2 = exp(-1/A_i)**A_i 然后,运行powsimp(expr\u 1)返回预期的e^-1,但powsimp(expr\u 2)只返回原始的未简化表达式 在试图简化索引变量时,使用索引变量的正确方法是什么 注意
A = symbols('A', real=True)
A_i = Indexed(A, i)
expr_1 = exp(-1/A)**A
expr_2 = exp(-1/A_i)**A_i
然后,运行powsimp(expr\u 1)
返回预期的e^-1,但powsimp(expr\u 2)
只返回原始的未简化表达式
在试图简化索引变量时,使用索引变量的正确方法是什么
注意:引入一个实际的求和,因为这是我试图做的,运行powsimp(求和(expr_1,(I,1,I))
返回预期的I/e,但是powsimp(求和(expr_2,(I,1,I))
仍然返回未简化的表达式。表达式exp(-1/A)**A
等于exp(-1)
如果A是真实的,但不是一般的。比如说,
a = symbols('a')
expr = (exp(-1/a)**a).subs(a, I/(2*pi)) # returns 1
(这里的I
是一个内置的symphy常数I
,即虚单位)
因此,真实的假设对于简化是必要的。目前(v1.3)SymPy。虽然powsimp
有一个标志force=True
,旨在通过忽略假设来强制简化,但这对exp(-1/a)**a
没有影响
作为一种解决方法,我提供了一个函数powsimp\u index
,它接受一个表达式和可选参数:force
,如上所述,以及index\u假设
。表达式中的所有索引符号均替换为带有索引假设的“假人”,进行简化,然后撤消替换
示例:
>>> powsimp_indexed(expr_2)
exp(-1/A[i])**A[i]
>>> powsimp_indexed(expr_2, real=True)
exp(-1)
>>> powsimp_indexed(Sum(expr_2, (i, 1, M)), real=True).doit()
exp(-1)*M
在后一种情况下,简化需要在求和之前进行:因此,Sum
是一个惰性(未计算)和,它首先被简化,然后doit()
执行求和
def powsimp_indexed(expr, force=False, **indexed_assumptions):
indexed_syms = {t for t in expr_2.free_symbols if isinstance(t, Indexed)}
subs = {}
inverse_subs = {}
for s in indexed_syms:
d = Dummy('xi', **indexed_assumptions)
subs[s] = d
inverse_subs[d] = s
return powsimp(expr.xreplace(subs), force=force).xreplace(inverse_subs)
更改发生在powersimp之前:如果r
为实,则exp(-1/r)**r
->exp(-1)
。