Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用辛函数化简索引指数_Python_Sympy - Fatal编程技术网

Python 用辛函数化简索引指数

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)只返回原始的未简化表达式 在试图简化索引变量时,使用索引变量的正确方法是什么 注意

我试图使用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)
只返回原始的未简化表达式

在试图简化索引变量时,使用索引变量的正确方法是什么

注意:引入一个实际的求和,因为这是我试图做的,运行
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)