我听说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
答案 0 :(得分: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))
我认为这最接近你想做的事。
答案 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计算所需错误中的总和。如果您的计算会遇到内置浮点数的精度,则可以使用Decimal,GyPy,mpmath或bigfloat等库。
关于整数方法的注意事项:
虽然整数比方法似乎更准确,但它们对于实际计算是完全不切实际的。原因是: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位数而言变得不切实际。
因此,如果您想精确计算有限和少量的项并将最终结果表示为比率,则整数解是一个不错的选择,但如果您想将最终结果表示为小数,则只需坚持使用小数就可以了。