为什么 SymPy 不能正确处理实数?
Why does SymPy not work properly with real numbers?
我正在尝试在 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))
我假设原因是我使用的是浮点数而不是整数值。
有没有办法近似求和?
来自docs:
If it cannot compute the sum, it returns an unevaluated Sum object.
另一种方法是:
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
那是 a bug。它应该工作。但是,一般而言,最好尽可能在 SymPy 中使用精确的有理数而不是浮点数。如果您将 0.5
替换为 Rational(1, 2)
,它会起作用。
我正在尝试在 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))
我假设原因是我使用的是浮点数而不是整数值。
有没有办法近似求和?
来自docs:
If it cannot compute the sum, it returns an unevaluated Sum object.
另一种方法是:
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
那是 a bug。它应该工作。但是,一般而言,最好尽可能在 SymPy 中使用精确的有理数而不是浮点数。如果您将 0.5
替换为 Rational(1, 2)
,它会起作用。