为什么SymPy与实数无法正常工作?

时间:2016-09-17 14:32:13

标签: python sympy

我正在尝试评估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))

我认为原因是我使用的是浮点数而不是整数值。

有没有办法估算总和呢?

2 个答案:

答案 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)则可行。