问题描述
在统计物理中,我们经常试图找出表示为的配分函数
Z=\sum_i e^(-\beta E_i) 其中 \beta 是逆温度。 e^(-\beta E_i),求和项下的项称为玻尔兹曼权重。
现在在低温下,β变得非常大,我们面临的情况是我们必须计算一个非常大的正数或负数的指数(取决于 E_i 的符号)。
在普通的编程语言(例如 Python)中,如果 x>=1000,内在指数函数给出 e^x 无穷大。
例如,在 Python 3 中,我尝试根据泰勒级数展开来估计:
x = 1000
n = int(input('Enter number of terms in Taylor series\n'))
# Taylor Series expansion up to n-th term
def exponential(n,x):
sum = 1.0
for i in range(n,-1):
sum = 1 + x * sum / i
return sum
print('e^x =',exponential(n,x))
然而,n <= 300
的结果不同,inf
的结果变为 n >= 400
。
我们能否计算出大 beta 的配分函数(至少是 10 的幂)?会不会有什么窍门?
解决方法
一种方法是使用 mpmath Python 库,它可以处理任意精度和大数。
例如
import mpmath as mp
mp.dps =50
print(mp.exp(500))
结果是 1.40359221785284e+217
但我想知道一些分析近似是否是更好的方法?例如从Physics.SE看到这个