使用 SymPy 将元素代入求和?

Use SymPy to substitute elements into a summation?

我在使用 SymPy 方面一直有很好的体验,但我仍在弄清楚一些事情。

我不清楚的一件事是如何将集合替换为迭代操作,例如求和。

如果我有一个符号声明的求和运算,我该如何获取标准的数字集合并将它们代入求和?

from sympy import *

# We are going sum these items 
# by plugging into symbolic summation
items = [0, 5, 6, 2, 7]

# declare Sympy variables 
i, n = symbols('i n')
x = symbols('x', cls=Function)

# declare summation
f = Sum(x(i), (i, 0, n))

# how to iterate and sum items? 
f.subs(???) 

您将 x 定义为一个函数。您可以将其替换为从 items 列表中获取元素的函数。还需要代入n来指定求和的上限:

from sympy import *

# We are going sum these items
# by plugging into symbolic summation
items = [0, 5, 6, 2, 7]

# declare Sympy variables
i, n = symbols('i n')
x = symbols('x', cls=Function)

# declare summation
f = Sum(x(i), (i, 0, n))

f.subs(n, len(items) - 1).doit().replace(x, lambda i: items[i])

或者,您可以将 x 定义为 IndexedBase 实例,然后替换所有 x[i] 对象:

from sympy import *

# We are going sum these items
# by plugging into symbolic summation
items = [0, 5, 6, 2, 7]

# declare Sympy variables
i, n = symbols('i n')
x = IndexedBase('x')

# declare summation
f = Sum(x[i], (i, 0, n))

f.subs(n, len(items) - 1).doit().subs({x[i]: val for i, val in enumerate(items)})