Stirling 公式
Stirling公式
-
1.阶乘
n!=n(n−1)(n−2)⋯×3×2×1(n≥1) n! = n(n-1)(n-2)\cdots\times3\times2\times1\quad(n\geq1)n!=n(n−1)(n−2)⋯×3×2×1(n≥1)0!=1 0!= 10!=1
-
Stirling公式
n!≈2πn(ne)n n! \approx \sqrt{2\pi n}(\frac{n}{e})^n n!≈2πn(en)n
当n足够大的时候,n!的计算量很大,Stirling公式这个时候就很好用,公式也可以变形为
limn +∞n!2πn(ne)n=1 \lim_{n \ +\infty} \frac{n!}{\sqrt{2\pi n}(\frac{n}{e})^n}=1n +∞lim2πn(en)nn!=1
或者也等价于
limn +∞enn!nnn=2π \lim_{n \ +\infty}\frac{e^nn!}{n^n\sqrt{n}}=\sqrt{2\pi}n +∞limnnnenn!=2π
在Wikipedia上看到,Stirling公式是由 Abrr′mahamdeMoivre{\rm Abrr'maham de Moivre}Abrr′mahamdeMoivre发现的,不过没有那么精确
n!=cnn+12e−n n! = cn^{n+\frac{1}{2}}e^{-n} n!=cnn+21e−n 其中c为常数,后来Stirling证明了c=2πnc=\sqrt{2\pi n}c=2πn,约为2.506628274631.更加精确的形式是由雅克·比内发现的。
推导
这个公式的误差的估计,可以推导如下。首先不直接估计n!n!n!,而是考虑它的自然对数:
ln(n!)=ln1+ln2+ln3+⋯+lnn. \mathsf {ln}(n!) = \mathsf {ln}1+\mathsf {ln}2+\mathsf {ln}3+\cdots+\mathsf {ln}n.ln(n!)=ln1+ln2+ln3+⋯+lnn.
即:
ln(n!)−12lnn=ln1+ln2+⋯+lnn−12lnnln \mathsf {ln}(n!)-\frac{1}{2}\mathsf {ln}n=\mathsf {ln}1+\mathsf {ln}2+\cdots+lnn-\frac{1}{2}\mathsf {ln}n \mathsf {ln} ln(n!)−21lnn=ln1+ln2+⋯+lnn−21lnnln
这个方程的右边是积分∫1nln(x)dx=nlnn−n+1\int_1^n\mathsf {ln}(x)dx=n\mathsf {ln}n-n+1∫1nln(x)dx=nlnn−n+1的近似值(利用梯形法则),而他的误差由欧拉-麦克劳林公式给出:
ln(n!)−lnn2=ln1+ln2+ln3⋯+ln(n−1)+lnn2=nlnn−n+1+∑k=2mBk(−1)kk(k−1)(1nk−1−1)+Rm,n \mathsf {ln}(n!)-\frac{\mathsf {ln}n}{2}=\mathsf {ln}1+\mathsf {ln}2+\mathsf {ln}3\cdots+\mathsf {ln}(n-1)+\frac{\mathsf {ln}n}{2}=n\mathsf {ln}n-n+1+\sum_{k=2}^m\frac{B_k(-1)^k}{k(k-1)}(\frac{1}{n^{k-1}}-1)+R_{m,n} ln(n!)−2lnn=ln1+ln2+ln3⋯+ln(n−1)+2lnn=nlnn−n+1+k=2∑mk(k−1)Bk(−1)k(nk−11−1)+Rm,n
其中BkB_kBk是伯努利数,Rm,nR_{m,n}Rm,n是欧拉麦克劳林中的余项。取极限,可得:
limn→∞(lnn!−nlnn+n−lnn2)=1−∑k=2mBk(−1)kk(k−1)+limn→∞Rm,n.\lim_{n\to\infty} (\mathsf {ln}n!-n\mathsf {ln}n+n-\frac{\mathsf {ln}n}{2})=1-\sum_{k=2}^m\frac{B_k(-1)^k}{k(k-1)}+\lim_{n\to \infty} R_{m,n}.n→∞lim(lnn!−nlnn+n−2lnn)=1−k=2∑mk(k−1)Bk(−1)k+n→∞limRm,n.
把这个极限记为 y\mathsf yy .由于欧拉-麦克劳林公式中的余项Rm,nR_{m,n}Rm,n满足:
Rm,n=limn→∞+O(1n2m−1) R_{m,n} = \lim_{n\to \infty}+\Omicron(\frac{1}{n^{2m-1}}) Rm,n=n→∞lim+O(n2m−11)
其中用到了大 O\OmicronO符号,与以上的方程结合,便得出对数形式的近似公式:
lnn!=nln(ne)+lnn2+y+∑k=2mBk(−1)kk(k−1)nk−1+O(1n2m−1) \mathsf {ln}n! = n\mathsf {ln}(\frac{n}{e})+\frac{\mathsf {ln}n}{2}+y+\sum_{k=2}^m\frac{B_k(-1)^k}{k(k-1)n^{k-1}}+\Omicron(\frac{1}{n^{2m-1}}) lnn!=nln(en)+2lnn+y+k=2∑mk(k−1)nk−1Bk(−1)k+O(n2m−11)
两边取质数,并选择任何正整数mmm,便得到了一个含有未知数eye^yey的公式。当m=1m=1m=1时,公式为:
n!=eyn(ne)n[1+O(1n)] n!=e^y\sqrt n(\frac{n}{e})^n[1+\Omicron(\frac1n)] n!=eyn(en)n[1+O(n1)]
这个上述表达式带入沃利斯乘积公式,并令nnn趋于无穷,便可以得出
ey(ey=2π) e ^y(e^y=\sqrt {2\pi})ey(ey=2π)
因此,我们便得出斯特林公式:
n!=2πn(ne)n[1+O(1n)] n!=\sqrt {2\pi n}(\frac ne)^n[1+\Omicron(\frac 1n)] n!=2πn(en)n[1+O(n1)]
这个公式也可以反复使用分部积分法来得出,首相可以通过最速下降法得到。把以下的和:
ln(n!)=∑j=1nlnj \mathsf {ln}(n!)=\sum_{j=1}^n\mathsf {ln}j ln(n!)=j=1∑nlnj
用积分近似代替,可以得出不含2πn\sqrt {2\pi n}2πn的因子的Stirling公式(这个因子通常在实际应用中无关):
∑j=1nlnj≈∫1nlnxdx=nlnn−n+1\sum_{j=1}^n\mathsf {ln}j\approx \int_1^n\mathsf {ln}xdx=n\mathsf {ln}n-n+1 j=1∑nlnj≈∫1nlnxdx=nlnn−n+1
收敛速率和误差分析
更加精确的近似公式为:
n!=2πn(ne)neλn n!=\sqrt{2\pi n}(\frac ne)^ne^{\lambda_n}n!=2πn(en)neλn
其中:
112n+1<λn<112n\frac1{12n+1}<\lambda_n<\frac 1{12n} 12n+11<λn<12n1
Stirling公式实际上是一下级数(现在成为Stirling级数)的第一个近似值:
n!=2πn(ne)n(1+1288n2−13951840n3−5172488320n4+⋯ )n!=\sqrt{2\pi n}(\frac ne)^n(1+\frac 1{288n^2}-\frac {139}{51840n^3}-\frac{517}{2488320n^4}+\cdots) n!=2πn(en)n(1+288n21−51840n3139−2488320n4517+⋯)
当n→∞n \to \inftyn→∞时,截断级数的误差等于第一个省略掉的项。这是渐进展开式的一个例子。他不是一个收敛级数,对于任何特殊值n,级数的准确性只在取有限个项时达到最大,如果取更多的项,则准确性将变得越来越差。
阶乘的对数的渐近展开式也称为Stirling级数:
lnn!=nlnn−n+12ln(2πn)+112n−1360n3+11260n5−11680n7+⋯ \mathsf {ln}n!=n\mathsf {ln}n-n+\frac 12 \mathsf {ln}(2\pi n)+\frac 1{12n}-\frac 1{360n^3}+\frac 1{1260n^5}-\frac 1{1680n^7}+\cdotslnn!=nlnn−n+21ln(2πn)+12n1−360n31+1260n51−1680n71+⋯
这种情况下,级数的误差总是与第一个省略掉的异号,且最多同大小。
Gamma函数的Stirling公式
对于所有正整数,有:
n!=Π(n)=Γ(n+1). n!= \Pi (n)=\Gamma(n+1).n!=Π(n)=Γ(n+1).
然而,Gamma函数与阶乘不一样,他对于所有复数都有定义。尽管如此,Stirling公式仍然适用。如果R(z)>0R(z)>0R(z)>0,那么:
lnΓ(z)=(z−12)lnz−z+ln2π2+2∫o∞arctant2e2πt−1dt \mathsf {ln}\Gamma(z)=(z-\frac 12)\mathsf {ln}z-z+\frac{\mathsf {ln}2\pi}2+2\int_o^\infty\frac{arctan\frac t2}{e^{2\pi t}-1}dtlnΓ(z)=(z−21)lnz−z+2ln2π+2∫o∞e2πt−1arctan2tdt
反复使用分部积分法,可得一下渐近展开式:
lnΓ(z)=(z−12)lnz−z+ln2π2+∑n=1∞(−1)n−1Bn2n(2n−1)z2n−1\mathsf {ln}\Gamma (z)=(z-\frac 12)\mathsf {ln}z-z+\frac {\mathsf {ln} 2\pi}2 +\sum_{n=1}^\infty\frac{(-1)^{n-1}B_n}{2n(2n-1)z^{2n-1}}lnΓ(z)=(z−21)lnz−z+2ln2π+n=1∑∞2n(2n−1)z2n−1(−1)n−1Bn
其中BnB_nBn是第n个伯努利数。当∣argz∣<π−ϵ|arg z|<\pi-\epsilon∣argz∣<π−ϵ,其中 ϵ\epsilonϵ 是正数时,这个公式对于绝对值足够大的zzz是适用的,当使用了最初mmm个项时,误差为O(z−m−12)\Omicron(z^{-m-\frac 12})O(z−m−21)。对应的近似值可以写为:
Γ(z)=2πz(ze)z[1+O(1z)] \Gamma (z)=\sqrt{\frac {2\pi}{z}}(\frac ze)^z[1+\Omicron(\frac 1z)]Γ(z)=z2π(ez)z[1+O(z1)]
Stirling公式的收敛公式
欲得出Stirling公式的一个收敛形式,我们必须计算:
∫0∞2arctant2e2πt−1dt=lnΓ(z)−(z−12)lnz+z−12ln(2π) \int_0^\infty \frac {2arctan\frac t2 }{e^{2\pi t}-1}dt=\mathsf {ln}\Gamma(z)-(z-\frac 12)\mathsf {ln}z+z-\frac 12 \mathsf {ln}(2\pi)∫0∞e2πt−12arctan2tdt=lnΓ(z)−(z−21)lnz+z−21ln(2π)
一种方法是利用含有上升阶乘幂的级数。如果
zn‾=z(z+1)⋯(z+n−1)z^{\overline n}=z(z+1)\cdots(z+n-1)zn=z(z+1)⋯(z+n−1)
那么:
∫0∞2arctant2e2πt−1dt=∑n=1∞cn(z+1)n‾ \int_0^\infty \frac {2arctan\frac t2 }{e^{2\pi t}-1}dt=\sum_{n=1}^\infty \frac {c_n}{(z+1)^{\overline n}}∫0∞e2πt−12arctan2tdt=n=1∑∞(z+1)ncn
其中:
cn=1n∫01xn‾(x−12)dx c_n=\frac 1n\int_0^1x^{\overline n}(x-\frac 12)dxcn=n1∫01xn(x−21)dx
从中可以得出Stirling级数的一个收敛形式:
lnΓ(z)=(z−12)lnz−z+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)+⋯ \mathsf {ln}\Gamma(z)=(z-\frac 12)\mathsf {ln}z-z+\frac {\mathsf {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 lnΓ(z)=(z−21)lnz−z+2ln2π+12(z+1)1+12(z+1)(z+2)1+360(z+1)(z+2)(z+3)59+60(z+1)(z+2)(z+3)(z+4)29+⋯
他在R(z)>0时收敛
适用于计算器的形式
以下的近似值
Γ≈2πz(zezsinh1z+1810z6)z \Gamma\approx\sqrt{\frac{2\pi}{z}}(\frac ze\sqrt{zsinh\frac1z+\frac 1{810z^6}})^zΓ≈z2π(ezzsinhz1+810z61)z
或:
2lnΓ(z)≈ln(2π)−lnz+z[2lnz+ln(zsinh1z+1810z6)−2] 2\mathsf {ln}\Gamma(z)\approx\mathsf {ln}(2\pi)-\mathsf {ln}z+z[2\mathsf {ln}z+\mathsf {ln}(zsinh\frac 1z+\frac 1{810z^6})-2]2lnΓ(z)≈ln(2π)−lnz+z[2lnz+ln(zsinhz1+810z61)−2]
可以通过把Stirling公式整理,并注意到它的幂级数与双曲正弦函数的泰勒级数展开式的相似性来得出。当zzz的实数部分大于8时,这个近似值精确到小数点后8位。2002年,Robert H. Windschitl建议计算Γ(z)\Gamma(z)Γ(z)函数Gergo Nemes在2007年提出了一个近似公式,它的精确度与Windschitl的公式相等,但更加简单:
Γ(z)≈2πz[1e(z+112z−110z)]z \Gamma (z)\approx \sqrt{\frac {2\pi}{z}}[\frac 1e(z+\frac 1{12z-\frac 1{10z}})]^zΓ(z)≈z2π[e1(z+12z−10z11)]z
或:
lnΓ(z)≈12[ln(2π)−lnz]+z[ln(z++112z−110z)−1] \mathsf {ln}\Gamma (z)\approx\frac 12 [\mathsf {ln}(2\pi)-\mathsf {ln}z]+z[\mathsf {ln}(z++\frac 1{12z-\frac 1{10z}})-1]lnΓ(z)≈21[ln(2π)−lnz]+z[ln(z++12z−10z11)−1]
这个到后面全部都是Wikipedia上抄的了,因为不知道怎么总结了,就选择直接把他手打了一份,就当练习Markdown编辑器了,立个flag,把这里面的一些 名词都手打一遍,看一遍。今天就这样了吧,有点醉orβ\betaβ