我想计算以下总和。问题是我认为二项式系数太大,因此失败了。

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


有什么办法可以近似答案吗?

最佳答案

好吧,binom相当早就达到了顶峰:

from scipy.special import binom

binom(1019, 509)    # => 1.40313388415e+305
binom(1020, 510)    # => inf


您要执行的计算到底是什么?



这是一个重新格式化的版本,它将值稍微偏移一点;我们可以找到每个n的二项式序列的连续值,而不必每次都从头开始进行重新计算,而且我已经将平方幂进行了一次运算。

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)

关于python - 计算大二项式系数的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22965774/

10-10 23:58