史特靈公式

来自testwiki
跳转到导航 跳转到搜索

Template:NoteTA

n增加时,(ln n!)与o (n ln nn)之比趋于1

Template:函數圖形 史特靈公式Template:Lang-en)是一條用來取n階乘近似值數學公式。一般來說,當n很大的時候,n階乘的計算量十分大,所以史特靈公式十分好用,而且,即使在n很小的時候,史特靈公式的取值已經十分準確。這個公式以Template:Le的名字命名,雖然亞伯拉罕·棣美弗早於史特靈提出了一個類似的公式,但結果較不精確。[1][2][3]

史特靈公式为:

n!2πn(ne)n.

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

limnn!2πn(ne)n=1

limnenn!nnn=2π.

历史

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

n!cnn+12en,其中c為常數。

Template:Link-en证明了公式中c=2π,約為Template:複變運算。更加精确的形式是雅克·比内发现的。

推导

方法一

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

ln(n!)=ln1+ln2++lnn.

即:

ln(n!)lnn2=ln1+ln2++lnnlnn2.

这个方程的右面是积分1nln(x)dx=nlnnn+1的近似值(利用梯形法则),而它的误差欧拉-麦克劳林公式给出:

ln(n!)lnn2=ln1+ln2++ln(n1)+lnn2=nlnnn+1+k=2mBk(1)kk(k1)(1nk11)+Rm,n.

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

limn(lnn!nlnn+nlnn2)=1k=2mBk(1)kk(k1)+limnRm,n.

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

Rm,n=limnRm,n+O(1n2m1),

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

lnn!=nln(ne)+lnn2+y+k=2mBk(1)kk(k1)nk1+O(1n2m1).

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

n!=eyn(ne)n[1+O(1n)]

将上述表达式代入沃利斯乘积公式,并令n趋于无穷,便可以得出eyey=2π)。因此,我们便得出斯特林公式:

n!=2πn(ne)n[1+O(1n)]

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

ln(n!)=j=1nlnj

用积分近似代替,可以得出不含2πn的因子的斯特林公式(这个因子通常在实际应用中无关):

j=1nlnj1nlnxdx=nlnnn+1.

方法二

考虑如下近似关系:

lnn!=k=1nlnk1nlnxdx=nlnnn+1nlnnn

以及阶乘的积分形式(Γ函数):

n!=0exxndx

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

ddxln(exxn)=ddx(nlnxx)=nx1

因此被积函数只有在x=n附近才趋于平稳,现令xn+ξξn,并改写成如下形式:

ln(xnex)=nlnxx=nln(n+ξ)(n+ξ)

于是有:

ln(n+ξ)=ln[n(1+ξn)]=lnn+ln(1+ξn)=lnn+ξnξ22n2+

因此可以得到:

ln(xnex)=nln(n+ξ)(n+ξ)=nlnn+ξξ22nnξ+=nlnnnξ22n+

两边同时作指数函数运算,变成:

xnexenlnneneξ22n=nneneξ22n

代入到阶乘的积分表示形式,得到:

n!nnneneξ22ndξnneneξ22ndξ

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

n!nnen2πn

收敛速率和误差估计

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

更加精确的近似公式为:

n!=2πn(ne)neλn

其中:

112n+1<λn<112n.

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

n!=2πn(ne)n(1+112n+1288n213951840n35712488320n4+).

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

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

lnn!=nlnnn+12ln(2πn)+112n1360n3+11260n511680n7+.

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

伽玛函数的斯特林公式

对于所有正整数,有:

n!=Π(n)=Γ(n+1).

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

lnΓ(z)=(z12)lnzz+ln2π2+20arctantzexp(2πt)1dt.

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

lnΓ(z)=(z12)lnzz+ln2π2+n=1(1)n1Bn2n(2n1)z2n1

其中Bn是第n个伯努利数。当|argz|<πϵ,其中ε是正数时,这个公式对于绝对值足够大的z是适用的,当使用了最初m个项时,误差项为O(zm12)。对应的近似值可以写为:

Γ(z)=2πz(ze)z[1+O(1z)].

斯特林公式的收敛形式

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

02arctantzexp(2πt)1dt=lnΓ(z)(z12)lnz+z12ln(2π).

一种方法是利用含有上升阶乘幂的级数。如果zn=z(z+1)(z+n1),那么:

02arctantzexp(2πt)1dt=n=1cn(z+1)n

其中:

cn=1n01xn(x12)dx.

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

lnΓ(z)=(z12)lnzz+ln2π2
+112(z+1)+112(z+1)(z+2)+59360(z+1)(z+2)(z+3)+2960(z+1)(z+2)(z+3)(z+4)+

它在(z)>0时收敛。

适用于计算器的形式

以下的近似值

Γ(z)2πz(zezsinh1z+1810z6)z,

2lnΓ(z)ln(2π)lnz+z[2lnz+ln(zsinh1z+1810z6)2],

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

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

Γ(z)2πz[1e(z+112z110z)]z,

lnΓ(z)12[ln(2π)lnz]+z[ln(z+112z110z)1]

参考文献

  1. Template:Citation
  2. Template:Citation; see p. 81, "The result, obtained using a formula originally proved by de Moivre but now called Stirling's formula, occurs in his 'Doctrine of Chances' of 1733."
  3. Template:Citation