我正在尝试评估SymPy中的无限总和。虽然第一个表达式是按照我预期的方式计算的,但SymPy似乎在第二个表达式上遇到了麻烦。
from sympy import *
n = symbols('n')
print Sum((2)**(-n), (n, 1, oo)).doit()
print Sum((0.5)**(n), (n, 1, oo)).doit()
结果:
1
Sum(0.5**n, (n, 1, oo))
我认为原因是我使用的是浮点数而不是整数值。
有没有办法估算总和呢?
答案 0 :(得分:3)
来自docs:
如果无法计算总和,则返回未评估的Sum对象。
另一种方法是:
In [40]: Sum((Rational(1,2))**(n), (n, 1, oo)).doit()
Out[40]: 1
另一种方法:
In [43]: Sum((0.5)**(n), (n, 1, float('inf'))).doit()
Out[43]: 1.00000000000000
要近似,您可以使用足够大的数字而不是无穷大:
In [51]: import sys
In [52]: Sum((0.5)**(n), (n, 1, sys.maxint)).doit()
Out[52]: 1.00000000000000
答案 1 :(得分:2)
那是a bug。它应该工作。但是,一般情况下,尽可能在SymPy中优先使用精确的有理数而不是浮点数。如果您将0.5
替换为Rational(1, 2)
则可行。