我想计算以下数额。问题是二项式系数太大我认为它失败了。
from __future__ import division
import numpy as np
from scipy.special import binom
print [sum(binom(n,2*k)*np.sqrt(np.pi*k)**(-n/10) for k in xrange(1,int(n/2)+1)) for n in xrange(100000)]
有没有办法估算答案?
答案 0 :(得分:2)
您遇到的问题是scipy.special.binom
接近答案。您可以尝试使用带有可选参数scipy.misc.comb
的{{1}}来精确计算它们。
使用exact=True
它会使用gamma函数进行快速计算,但您可以强制它使用exact=False
显式计算系数。在这种情况下,它返回一个python exact=True
。
例如:
long
此外,您可以尝试使用In [1]: from scipy.misc import comb
In [2]: comb(1100, 600, exact=1)
Out[2]: 3460566959226705345639127495806232085745599377428662585566293887742644983083368677353972462238094509711079840182716572056521046152741092473183810039372681921994584724384022883591903620756613168264181145704714086085028150718406438428295606240034677372942820551517227766024953527980780035209056864110017856973033878393954438656320L
以外的内容:gmpy here和here。
答案 1 :(得分:1)
嗯,binom很早就出现了:
from scipy.special import binom
binom(1019, 509) # => 1.40313388415e+305
binom(1020, 510) # => inf
您要尝试执行的计算究竟是什么?
这是一个重新制定的版本,它将价值观转移了一下;我们可以为每个n找到二项式序列的连续值,而不是每次都从头开始重新计算,并且我已经将一个sqrt的幂推到了一个操作中。
from math import pi
for n in xrange(100000):
total = 0.
binom = 1
binom_mul = n
binom_div = 1
power = -0.05 * n
for k in xrange(1, n // 2 + 1):
binom = binom * binom_mul / binom_div
binom_mul -= 1
binom_div += 1
total += binom * (pi * k) ** power
print(total)