我正在编写一个评估幂级数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]
引发异常。
在这种情况下,符号存储在列表中,您如何编码求和?感谢您的帮助!
答案 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
。