python中的无限总和

时间:2011-09-12 14:00:40

标签: 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位数。

此外,我正在查看这篇文章here并尝试模仿,但它给了我以下错误:

`NameError: name 'Infinity' is not defined`
`NameError: name 'Inf' is not defined`

谢谢, Adhvaitha

5 个答案:

答案 0 :(得分:8)

虽然它仍然有限,但您可以使用fractionsdecimal模块来近似该系列:

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))

我认为这最接近你想做的事。

答案 1 :(得分:5)

Python具有无限精度整数,但不具有无限精度浮点数。但是,您可以使用提供的包。

没有任何东西可以“完成”无限的总和,因为它涉及无数个步骤。你需要为总和找到一个封闭的形式,然后评估它,或接受在满足精度标准时终止无限和所实现的近似。

答案 2 :(得分:5)

在黑暗中点了一下......当你听说Python能够做无限数量时,我敢打赌,他们的意思是Python long integers have unlimited precision

显然,这与总结无限系列无关。

我不知道Python的任何方面会使它特别适合计算这种总和(或确实确定一个和是否收敛)。

您可以尝试使用一些合理的停止标准直接求和术语。但是,这只适用于表现良好的系列。

最后,只是为了让你了解一下你所要求的复杂性,academic papers get published其唯一目的是处理某些小类系列的总和。你摆出的一般问题并不像看起来那么容易。

答案 3 :(得分:3)

#It may be late answer but the following works well.

repetitions = 50

r = 0.0

for i in range(repetitions):
   ii=i+1 # because in python index start from 0
   r+=((-1)**(ii-1))/(2*ii-1.0)

print r

#the output is r=0.780398663148, you can increase the repetitions for more accuracy

答案 4 :(得分:2)

对于某些系列,例如显示的系列,您可以使用alternating series test计算所需错误中的总和。如果您的计算会遇到内置浮点数的精度,则可以使用DecimalGyPympmathbigfloat等库。

关于整数方法的注意事项
虽然整数比方法似乎更准确,但它们对于实际计算是完全不切实际的。原因是:1)添加分数需要创建相等的分母,这基本上需要乘以分母,所以到那时,数字的大小类似于n!(即factorial ); 2)对于示例系列,m位数的精度需要m个术语。因此,即使只有六位数的精度,也需要大约等于1000000的数字! = 8×10 5,565,708 。对于更大的数字,它大约是10 10 n ,这很快变得完全不切实际。同时,计算为6或7或甚至40位的十进制解是微不足道的。

例如,运行夜间爆竹解决方案,我得到的分母或分子中的时间和位数是:

    n      t       n_digits_in_denominator
   10      0.0003  14
  100      0.0167  170
 1000      5.5027  1727
10000      ????    ????   (gave up after waiting one hour)

这对于仅精确到4位数而言变得不切实际。

因此,如果您想精确计算有限和少量的项并将最终结果表示为比率,则整数解是一个不错的选择,但如果您想将最终结果表示为小数,则只需坚持使用小数就可以了。