斯特靈公式

维基百科,自由的百科全书
跳转至: 导航搜索
n增加时,(ln n!)与o (n ln nn)之比趋于1。

斯特靈公式是一條用來取n階乘近似值數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以斯特靈公式十分好用,而且,即使在n很小的時候,斯特靈公式的取值已經十分準確。

公式为:

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! \sim 常数 × n^{n+1/2} e^{-n}.

斯特灵证明了公式中的常数为\sqrt{2\pi}。更加精确的形式是雅克·比内发现的。

推导[编辑]

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

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

这个方程的右面是积分\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趋于无穷,便可以得出eye^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.

收敛速率和误差估计[编辑]

y轴表示截断的斯特灵级数的相对误差,x轴表示所使用的项数。

更加精确的近似公式为:

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

其中:

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

斯特灵公式实际上是以下级数(现在称为斯特灵级数)的第一个近似值:


  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,级数的准确性只在取有限个项时达到最大,如果再取更多的项,则准确性将变得越来越差。

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


  \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(z^{-m - 1/2})。对应的近似值可以写为:

\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).

参考文献[编辑]