用大二项式系数计算总和

时间:2014-04-09 14:31:22

标签: python math numpy

我想计算以下数额。问题是二项式系数太大我认为它失败了。

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

有没有办法估算答案?

2 个答案:

答案 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 herehere

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