编写一个Python程序来验证斯特林近似

2024-10-04 05:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

统计力学中一个非常重要的方程是大数的斯特林近似,lnN=NlnN−N(N>;>;1)。编写一个Python程序来验证这种近似。更具体地说,评估比率lnN/NlnN−N表示N=1000000

这是我的程序,但我不能让它工作。它没有给我一个错误,只是Python中断了。我没学过很多numpy,所以我没用过

from math import log
N = 1000000
N_factorial=1
for i in range(1,N + 1):
       N_factorial = N_factorial*i
a = log(N_factorial)
b = N*log(N)-N
print(a/b)

Tags: fromimportgt程序numpylogfor错误
2条回答

您只需使用math.factorial()函数即可:

>>> import math
>>> n = 1000000
>>> math.log(math.factorial(n))/(n*math.log(n)-n)
1.0000006107204127

但是,使用对数乘积规则,可以对n因子的自然对数求和(因为log(a*b) = log(a) + log(b)log(a!) = log(a) + log(a-1) + log(a-2) + ... + log(2) + log(1)

>>> import math
>>> n = 1000000
>>> sum([math.log(i+1) for i in range(n)])/(n*math.log(n)-n)

哈哈,为什么每个人都要直接发帖呢

显然,您应该添加,而不是试图计算一个600万位数的数字。因此,您应该有如下代码:

def logfac(n):
    return sum(math.log(i) for i in range(1,n+1))

def sterling(n):
    return n*math.log(n) − n

n = 1000000
print(logfac(n)/sterling(n))

相关问题 更多 >