Python中的无限级数
我听说Python可以计算无限和。比如说,如果我想计算这个无限和:
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...
我该怎么做呢?我对Python还很陌生,所以如果有人能把完整的代码写出来,并告诉我是否需要导入什么,那就太好了。
举个例子,在Wolfram Alpha上,如果我输入 Summation (-1)^(n-1)/(2*n-1) from n=1 to infinity
,它会给出答案 0.785395
。我想要计算出一个精确度,比如说像Wolfram Alpha那样,精确到6位数字。
另外,我看了这个帖子 这里,试着模仿一下,但出现了以下错误:
`NameError: name 'Infinity' is not defined`
`NameError: name 'Inf' is not defined`
谢谢,
Adhvaitha
6 个回答
5
这里有点像是在瞎猜……我敢打赌,当你听说Python可以处理无限求和时,他们指的是Python中的长整型数字是无限精度的。
显然,这和求和无限级数没有关系。
我不知道Python有什么特别的地方能让它特别适合计算这种求和(或者说判断一个求和是否收敛)。
你可以尝试直接把项加起来,设定一个合理的停止条件。不过,这种方法只适用于表现良好的级数。
最后,给你一点关于你所问问题复杂性的感觉,有些学术论文专门讨论某些小类级数的求和。你提出的这个一般性问题并没有看起来那么简单。
5
Python里的整数可以非常大,几乎没有限制,但浮点数的精度是有限的。不过,有一些工具包可以帮助你实现更高的浮点数精度。
而且,没有什么方法可以“完成”一个无限的总和,因为这需要进行无限多的步骤。你需要找到一个简单的公式来表示这个总和,然后去计算它,或者接受一个近似值,也就是在达到一定精度时停止计算这个无限的总和。
8
虽然这个系列是有限的,但你可以使用 fractions
和 decimal
这两个模块来进行近似计算:
from fractions import Fraction
from decimal import Decimal
repetitions = 100
d = 1
r = Fraction(1, d)
for n in range(repetitions):
r += Fraction(1, d) - Fraction(1, d + 2)
d += 4
print(Decimal(r.numerator)/Decimal(r.denominator))
我觉得这个方法最接近你想要做的事情。