SymPy:列表中符号求和的表达式

时间:2018-09-25 16:40:30

标签: python sympy

我正在编写一个评估幂级数sum_{m=0}{oo} a[m]x^m的程序,其中a[m]被递归定义:a[m]=f(a[m-1])。我正在生成符号,如下所示:

a = list(sympy.symbols(' '.join([('a%d' % i) for i in range(10)])))
for i in range(1, LIMIT):
   a[i] = f_recur(a[i-1], i-1)

这使我可以使用a0,a1,...,a9来引用符号a[0],a[1],...,a[9],而a[m]a[m-1]给定的f_recur的函数。

现在,我希望对总和进行如下编码:

m, x, y = sympy.symbols('m x y')
y = sympy.Sum(a[m]*x**m, (m, 0, 10))

但是,m不是整数,因此a[m]引发异常。

在这种情况下,符号存储在列表中,您如何编码求和?感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

SymPy的Sum设计为具有符号索引的和。您想要一个包含0到9的具体索引的总和。这可能是Python的sum

y = sum([a[m]*x**m for m in range(10)])

,或者,从性能(relevant issue)来看,这是最好的

y = sympy.Add(*[a[m]*x**m for m in range(10)])

无论哪种情况,m都不是符号,而是整数。

答案 1 :(得分:0)

我有一个不使用sympy.Sum的变通办法:

x = sympy.symbols('x')
y = a[0]*x**0
for i in range(1, LIMIT):
    y += a[i]*x**i

这可以完成工作,但是不使用sympy.Sum