使用 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)})
我在使用 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)})