史特灵公式

史特灵公式（Stirling's formula）是一条用来取n阶乘近似值的数学公式。一般来说，当n很大的时候，n阶乘的计算量十分大，所以史特灵公式十分好用，而且，即使在n很小的时候，史特灵公式的取值已经十分准确。这个公式以詹姆斯·史特灵 (数学家)的名字命名，虽然亚伯拉罕·棣美弗早于史特灵提出了一个类似的公式，但结果较不精确。

$\sqrt{2\pi}$

史特灵公式为：

$$n! \approx \sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}.$$

这就是说，对于足够大的整数n，这两个数互为近似值。更加精确地：

$$\lim_{n \rightarrow \infty} {\frac{n!}{\sqrt{2\pi n}\, \left(\frac{n}{e}\right)^{n}}} = 1$$

或

$$\lim_{n \rightarrow \infty} {\frac{e^n\, n!}{n^n \sqrt{n}}} = \sqrt{2 \pi}.$$

## 历史

这个公式是亚伯拉罕·棣莫弗首先发现的，形式为：

$\displaystyle n! \approx c n^{n+\frac{1}{2}} e^{-n}$，其中c为常数。

斯特林 (数学家)证明了公式中$c=\sqrt{2\pi}$，约为sqrt(2*pi)。更加精确的形式是雅克·比内发现的。

## 推导

### 方法一

这个公式，以及误差的估计，可以推导如下。首先不直接估计n!，而是考虑它的自然对数：

$$\ln (n!) = \ln 1 + \ln 2 + \cdots + \ln n.$$

即:

$$\ln (n!) - \frac{\ln n}{2} = \ln 1 + \ln 2 + \cdots + \ln n - \frac{\ln n}{2}.$$

这个方程的右面是积分$\int_1^n \ln(x)\,dx = n \ln n - n + 1$的近似值（利用梯形法则），而它的误差由欧拉-麦克劳林公式给出：

$$\ln (n!) - \frac{\ln n}{2} = \ln 1 + \ln 2 + \cdots + \ln(n-1) + \frac{\ln n}{2} = n \ln n - n + 1 + \sum_{k=2}^{m} \frac{B_k {(-1)}^k}{k(k-1)} \left( \frac{1}{n^{k-1}} - 1 \right) + R_{m,n}.$$

其中Bk是伯努利数，Rm,n是欧拉-麦克劳林公式中的余项。取极限，可得：

$$\lim_{n \to \infty} \left( \ln n! - n \ln n + n - \frac{\ln n}{2} \right) = 1 - \sum_{k=2}^{m} \frac{B_k {(-1)}^k}{k(k-1)} + \lim_{n \to \infty} R_{m,n}.$$

把这个极限记为y。由于欧拉-麦克劳林公式中的余项Rm,n满足：

$$R_{m,n} = \lim_{n \to \infty} R_{m,n} + O \left( \frac{1}{n^{2m-1}} \right),$$

其中用到了大O符号，与以上的方程结合，便得出对数形式的近似公式：

$$\ln n! = n \ln \left( \frac{n}{e} \right) + \frac{\ln n}{2} + y + \sum_{k=2}^{m} \frac{B_k {(-1)}^k}{k(k-1)n^{k-1}} + O \left( \frac{1}{n^{2m-1}} \right).$$

两边取指数，并选择任何正整数m，便得到了一个含有未知数ey的公式。当m=1时，公式为：

$$n! = e^{y} \sqrt{n}~{\left( \frac{n}{e} \right)}^n \left[ 1 + O \left( \frac{1}{n} \right) \right]$$

将上述表达式代入沃利斯乘积公式，并令n趋于无穷，便可以得出ey（$e^y = \sqrt{2 \pi}$）。因此，我们便得出斯特林公式：

$$n! = \sqrt{2 \pi n}~{\left( \frac{n}{e} \right)}^n \left[ 1 + O \left( \frac{1}{n} \right) \right]$$

这个公式也可以反复使用分部积分法来得出，首项可以通过最速下降法得到。把以下的和

$$\ln(n!) = \sum_{j=1}^{n} \ln j$$

用积分近似代替，可以得出不含$\sqrt{2 \pi n}$的因子的斯特林公式（这个因子通常在实际应用中无关）：

$$\sum_{j=1}^{n} \ln j \approx \int_1^n \ln x \, dx = n\ln n - n + 1.$$

### 方法二

考虑如下近似关系：

$$\begin{align}\ln n!&=\sum_{k=1}^n\ln k\\&\approx\int_1^n\ln x\mathrm dx=n\ln n-n+1\\&\approx n\ln n-n\end{align}$$

以及阶乘的积分形式（Γ函数）：

$$n!=\int_0^\infty\mathrm e^{-x}x^n\mathrm dx$$

其中被积函数取对数后求导结果可写成：

$$\frac{\mathrm d}{\mathrm dx}\ln(\mathrm e^{-x}x^n)=\frac{\mathrm d}{\mathrm dx}(n\ln x-x)=\frac nx-1$$

因此被积函数只有在$x=n$附近才趋于平稳，现令$x\equiv n+\xi$且$\xi\ll n$，并改写成如下形式：

$$\ln(x^n\mathrm e^{-x})=n\ln x-x=n\ln(n+\xi)-(n+\xi)$$

于是有：

$$\begin{align}\ln(n+\xi)&=\ln\left[n\left(1+\frac\xi n\right)\right]=\ln n+\ln\left(1+\frac\xi n\right)\\&=\ln n+\frac\xi n-\frac{\xi^2}{2n^2}+\cdots\end{align}$$

因此可以得到：

$$\begin{align}\ln(x^n\mathrm e^{-x})&=n\ln(n+\xi)-(n+\xi)\\&=n\ln n+\xi-\frac{\xi^2}{2n}-n-\xi+\cdots\\&=n\ln n-n-\frac{\xi^2}{2n}+\cdots\end{align}$$

两边同时作指数函数运算，变成：

$$\begin{align}x^n\mathrm e^{-x}&\approx\mathrm e^{n\ln n}\mathrm e^{-n}\mathrm e^{-\frac{\xi^2}{2n}}\\&=n^n\mathrm e^{-n}\mathrm e^{-\frac{\xi^2}{2n}}\end{align}$$

代入到阶乘的积分表示形式，得到：

$$\begin{align}n!&\approx\int_{-n}^\infty n^n\mathrm e^{-n}\mathrm e^{-\frac{\xi^2}{2n}}\mathrm d\xi\\&\approx n^n\mathrm e^{-n}\int_{-\infty}^\infty\mathrm e^{-\frac{\xi^2}{2n}}\mathrm d\xi\end{align}$$

约等号后侧得到的是高斯积分的形式，计算该积分得出斯特林公式：

$$n!\approx n^n\mathrm e^{-n}\sqrt{2\pi n}$$

## 收敛速率和误差估计

<image>

更加精确的近似公式为：

$$n! = \sqrt{2 \pi n} \; \left(\frac{n}{e}\right)^{n}e^{\lambda_n}$$

其中：

$$\frac{1}{12n+1} < \lambda_n < \frac{1}{12n}.$$

斯特林公式实际上是以下级数（现在称为斯特林级数）的第一个近似值：

$$<pre> n!=\sqrt{2\pi n}\left({n\over e}\right)^n \left( 1 +{1\over12n} +{1\over288n^2} -{139\over51840n^3} -{571\over2488320n^4} + \cdots \right).$$

当$n \to \infty$时，截断级数的误差等于第一个省略掉的项。这是渐近展开式的一个例子。它不是一个收敛级数；对于任何特殊值n，级数的准确性只在取有限个项时达到最大，如果再取更多的项，则准确性将变得越来越差。

阶乘的对数的渐近展开式也称为斯特林级数：

$$<pre> \ln n!=n\ln n - n + {1\over 2}\ln(2\pi n) +{1\over12n} -{1\over360n^3} +{1\over1260n^5} -{1\over 1680n^7} +\cdots.$$

在这种情况下，级数的误差总是与第一个省略掉的项异号，且最多同大小。

## 伽玛函数的斯特林公式

对于所有正整数，有：

$$n! = \Pi(n) = \Gamma(n+1).$$

然而，伽玛函数与阶乘不一样，它对于所有复数都有定义。尽管如此，斯特林公式仍然适用。如果$\Re(z) > 0$，那么：

$$\ln \Gamma (z) = \left(z-\frac12\right)\ln z -z + \frac{\ln {2 \pi}}{2} + 2 \int_0^\infty \frac{\arctan \frac{t}{z}}{\exp(2 \pi t)-1}\, dt.$$

反复使用分部积分法，可得以下渐近展开式：

$$\ln \Gamma (z) = \left(z-\frac12\right)\ln z -z + \frac{\ln {2 \pi}}{2} + \sum_{n=1}^\infty \frac{(-1)^{n-1}B_{n}}{2n(2n-1)z^{2n-1}}$$

其中Bn是第n个伯努利数。当$|\arg z| < \pi - \epsilon$，其中ε是正数时，这个公式对于绝对值足够大的z是适用的，当使用了最初m个项时，误差项为$O\left(z^{-m - \frac{1}{2}}\right)$。对应的近似值可以写为：

$$\Gamma(z) = \sqrt{\frac{2 \pi}{ z}}~{\left( \frac{z}{e} \right)}^z \left[ 1 + O \left( \frac{1}{z} \right) \right].$$

## 斯特林公式的收敛形式

欲得出斯特林公式的一个收敛形式，我们必须计算：

$$\int_0^\infty \frac{2\arctan \frac{t}{z}}{\exp(2 \pi t)-1}\, dt = \ln\Gamma (z) - \left( z-\frac12 \right) \ln z +z - \frac12\ln(2\pi).$$

一种方法是利用含有上升阶乘幂的级数。如果$z^{\overline n} = z(z+1) \cdots (z+n-1)$，那么：

$$\int_0^\infty \frac{2\arctan \frac{t}{z}}{\exp(2 \pi t)-1} \, dt = \sum_{n=1}^\infty \frac{c_n}{(z+1)^{\overline n}}$$

其中：

$$c_n = \frac{1}{n} \int_0^1 x^{\overline n} \left( x-\frac12 \right) \, dx.$$

从中可以得出斯特林级数的一个收敛形式：

$$\ln \Gamma (z) = \left( z-\frac12 \right) \ln z -z + \frac{\ln {2 \pi}}{2}$$

$${} + \frac{1}{12(z+1)} + \frac{1}{12(z+1)(z+2)} + \frac{59}{360(z+1)(z+2)(z+3)} + \frac{29}{60(z+1)(z+2)(z+3)(z+4)} + \cdots$$

它在$\Re(z)>0$时收敛。

## 适用于计算器的形式

以下的近似值

$$\Gamma(z) \approx \sqrt{\frac{2 \pi}{z} } \left( \frac{z}{e} \sqrt{ z \sinh \frac{1}{z} + \frac{1}{810z^6} } \right)^{z},$$

或

$$2 \ln \Gamma(z) \approx \ln(2 \pi) - \ln z + z \left[2 \ln z + \ln \left( z \sinh \frac{1}{z} + \frac{1}{810z^6} \right) - 2 \right],$$

可以通过把斯特林公式整理，并注意到它的幂级数与双曲正弦函数的泰勒级数展开式的相似性来得出。当z的实数部分大于8时，这个近似值精确到小数点后8位。2002年，Robert H. Windschitl建议计算器用这个公式来计算伽玛函数。

Gergő Nemes在2007年提出了一个近似公式，它的精确度与Windschitl的公式相等，但更加简单：

$$\Gamma(z) \approx \sqrt{\frac{2 \pi}{z} } \left[ \frac{1}{e} \left( z + \frac{1}{12z- \frac{1}{10z}} \right) \right]^{z},$$

或

$$\ln \Gamma(z) \approx \frac{1}{2} \left[\ln(2 \pi) - \ln z \right] + z \left[\ln \left( z + \frac{1}{12z- \frac{1}{10z}} \right)-1\right]$$

## 参考文献

- Abramowitz, M. and Stegun, I., Handbook of Mathematical Functions, http://www.math.hkbu.edu.hk/support/aands/toc.htm
- 夏慧异，章家顺, 史特灵公式在高等数学中的应用, http://ordostsg.org.cn:1080/KCMS/detail/detail.aspx?filename=XUSJ200904014&dbcode=CJFR&dbname=
- Paris, R. B., and Kaminsky, D., Asymptotics and the Mellin-Barnes Integrals, Cambridge University Press, 2001
- Whittaker, E. T., and Watson, G. N., A Course in Modern Analysis, fourth edition, Cambridge University Press, 1963. ISBN 0-521-58807-3
- , modified 2006