Python 为什么SymPy不能正确处理实数?

Python 为什么SymPy不能正确处理实数?,python,sympy,Python,Sympy,我在试着用symphy来计算一个无穷和。虽然第一个表达式是按我期望的方式计算的,但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)) 我假设原因是我使用的是浮点数而不是整数值 是否有一种方法来近似求和?从 如果无法计

我在试着用symphy来计算一个无穷和。虽然第一个表达式是按我期望的方式计算的,但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))
我假设原因是我使用的是浮点数而不是整数值

是否有一种方法来近似求和?

如果无法计算总和,则返回未计算的总和对象

另一种方法是:

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

如果无法计算总和,则返回未计算的总和对象

另一种方法是:

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

那太好了。它应该有用。然而,一般来说,在可能的情况下,在Symphy中,最好选择精确有理数而不是浮点数。如果将0.5替换为Rational1,2,则它可以工作

那太好了。它应该有用。然而,一般来说,在可能的情况下,在Symphy中,最好选择精确有理数而不是浮点数。如果将0.5替换为Rational1,2,则它可以工作

对于python 3.x,请使用sys.maxsize而不是sys.maxint。对于python 3.x,请使用sys.maxsize而不是sys.maxint