计算具有大二项式系数的总和
Posted
技术标签:
【中文标题】计算具有大二项式系数的总和【英文标题】:Calculate sums with large binomial coefficients 【发布时间】:2014-05-22 20:17:35 【问题描述】:我想计算以下总和。问题是我认为二项式系数太大所以它失败了。
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)]
有什么方法可以近似答案吗?
【问题讨论】:
【参考方案1】:您面临的问题是scipy.special.binom
接近答案。您可以尝试使用scipy.misc.comb
和可选参数exact=True
精确计算它们。
exact=False
使用 gamma 函数进行快速计算,但您可以强制它使用 exact=True
显式计算系数。在这种情况下,它返回一个 python long
。
例如:
In [1]: from scipy.misc import comb
In [2]: comb(1100, 600, exact=1)
Out[2]: 3460566959226705345639127495806232085745599377428662585566293887742644983083368677353972462238094509711079840182716572056521046152741092473183810039372681921994584724384022883591903620756613168264181145704714086085028150718406438428295606240034677372942820551517227766024953527980780035209056864110017856973033878393954438656320L
此外,您可以尝试使用 scipy
以外的其他内容:gmpy here 和 here。
【讨论】:
【参考方案2】:嗯,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)
【讨论】:
从数学上讲,这正是我的问题。这些值最终应趋于零。看来我需要一些方法来避免显式计算这些大量的二项式系数。以上是关于计算具有大二项式系数的总和的主要内容,如果未能解决你的问题,请参考以下文章