原文迁自 B 站 · 首次发布于 2023-07-01。正文与配图按原文保留。迁移时修复了原页面一处公式的字符转义显示问题。

【高中数学拓展】斯特林公式证明:原文配图

    自行整理,如有错误,欢迎指出,不胜感激。


    斯特林公式(Stirling's approximation)是一条用来取n的阶乘的近似值的数学公式。一般来说,阶乘的计算复杂度为线性。当要为某些极大大的n求阶乘时,常见的方法复杂度不可接受。斯特林公式能够将求解阶乘的复杂度降低到对数级。而且,即使在n很小的时候,斯特林公式的取值已经十分准确。


    斯特林公式如下:

n!=2πn⋅(ne)n⋅eθ12n(0<θ<1) n !=\sqrt{2 \pi n} \cdot\left(\frac{n}{\mathrm{e}}\right)^n \cdot \mathrm{e}^{\frac{\theta}{12 n}} \quad(0<\theta<1)

    我们已经知道ln(1+x)与ln(1-x)的泰勒展开:

ln⁡(1+x)=x−x22+x33−⋯+(−1)n−1xnn+⋯(−1<x≤1) \ln (1+x)=x-\frac{x^2}{2}+\frac{x^3}{3}-\cdots+(-1)^{n-1} \frac{x^n}{n}+\cdots \quad(-1<x \leq 1)

将xx替换为−x:-x:

ln⁡(1−x)=−x−x22−x33−⋯−xnn−⋯(−1<x<1) \ln (1-x)=-x-\frac{x^2}{2}-\frac{x^3}{3}-\cdots-\frac{x^n}{n}-\cdots \quad(-1<x<1)

两者相减去得到:

ln⁡1+x1−x=2x(1+x23+x45+⋯+x2m2m+1+⋯ )(−1<x<1) \ln \frac{1+x}{1-x}=2 x\left(1+\frac{x^2}{3}+\frac{x^4}{5}+\cdots+\frac{x^{2 m}}{2 m+1}+\cdots\right) \quad(-1<x<1)

    设x=1/(2n+1) ,n=1,2,3,···,得:

1+x1−x=1+12n+11−12n+1=2n+22n=n+1n \frac{1+x}{1-x}=\frac{1+\frac{1}{2 n+1}}{1-\frac{1}{2 n+1}}=\frac{2 n+2}{2 n}=\frac{n+1}{n}

    所以上式子就变为了: ln⁡n+1n=22n+1[1+13⋅1(2n+1)2+15⋅1(2n+1)4+⋯ ]\ln \frac{n+1}{n}=\frac{2}{2 n+1}\left[1+\frac{1}{3} \cdot \frac{1}{(2 n+1)^{2}}+\frac{1}{5} \cdot \frac{1}{(2 n+1)^{4}}+\cdots\right]

(n+12)ln⁡(1+1n)=[1+13⋅1(2n+1)2+15⋅1(2n+1)4+⋯ ] \left(n+\frac{1}{2}\right) \ln \left(1+\frac{1}{n}\right)=\left[1+\frac{1}{3} \cdot \frac{1}{(2 n+1)^{2}}+\frac{1}{5} \cdot \frac{1}{(2 n+1)^{4}}+\cdots\right]

    而右边的式子< 1+13(1(2n+1)2+1(2n+1)4+…)1+\frac{1}{3}\left(\frac{1}{(2 n+1)^{2}}+\frac{1}{(2 n+1)^{4}}+\ldots\right) =1+131(2n+1)211(2n+1)2=1+13⋅14n2+4n=1+112n(n+1)=1+\frac{1}{3} \frac{\frac{1}{(2 n+1)^{2}}}{1 \frac{1}{(2 n+1)^{2}}}=1+\frac{1}{3} \cdot \frac{1}{4 n^{2}+4 n}=1+\frac{1}{12 n(n+1)}

因为左式显然>1,所以有 1<(n+12)ln⁡(1+1n)<1+112ln⁡(n+1)1<\left(n+\frac{1}{2}\right) \ln \left(1+\frac{1}{n}\right)<1+\frac{1}{12 \ln (n+1)}

取一下指数: e<(1+1n)n+12<e1+12n(n+1)⇔1<(1+1n)n+12e<e12n(n+1)1}\left.e<\left(1+\frac{1}{n}\right)^{n+\frac{1}{2}}<e^{1+\frac{1}{2 n(n+1)}} \Leftrightarrow 1<\frac{\left(1+\frac{1}{n}\right)^{n+\frac{1}{2}}}{e}<e^{\frac{1}{2 n(n+1) 1}}\right\}


设一下: an=n!ennn+12a_{n}= \frac{ n ! e^{n}}{n^{n+\frac{1}{2}}} 那么 anan+1=n!en(n+1)n+1+12nn+12(n+1)!en+1=(1+1n)n+12e\frac{a_{n}}{a_{n+1}}=\frac{n ! e^{n}(n+1)^{n+1+\frac{1}{2}}}{n^{n+\frac{1}{2}}(n+1) ! e^{n+1}}=\frac{\left(1+\frac{1}{n}\right)^{n+\frac{1}{2}}}{e}

    由上面的不等式知道: anan+1>1\frac{a_{n}}{a_{n+1}}>1 所以该数列其实是单调递减的,且显然一定有下界0

那么该数列的极限一定存在,不妨设为a

anan+1=(1+1n)n+12e<e112n(n+1)=e112(1n−1n+1)=e112ne112(n+1) \frac{a_{n}}{a_{n+1}}=\frac{\left(1+\frac{1}{n}\right)^{n+\frac{1}{2}}}{\mathrm{e}}<\mathrm{e}^{\frac{1}{12 n(n+1)}}=\mathrm{e}^{\frac{1}{12}\left(\frac{1}{n}-\frac{1}{n+1}\right)}=\frac{\mathrm{e}^{\frac{1}{12 n}}}{\mathrm{e}^{\frac{1}{12(n+1)}}}

    最终得到: ane−112n<an+1e−112(n+1)a_{n} \mathrm{e}^{-\frac{1}{12 n}}<a_{n+1} \mathrm{e}^{-\frac{1}{12(n+1)}} 我们能看出来左右两个数列 ane−112na_{n} e^{-\frac{1}{12 n}} 是单调递增的。

而 lim⁡n→∞ane−112n=a\lim _{n \rightarrow \infty} a_{n} e^{-\frac{1}{12 n}}=a ,所以 ane−112n<a<ana_{n} e^{-\frac{1}{12 n}}<a<a_{n}

又 −1<−θ<0⇒−112n<−θ12n<0-1<-\theta<0 \Rightarrow-\frac{1}{12 n}<-\frac{\theta}{12 n}<0

两边取下指数: e−112n<e−θ12n<1⇒ane112n<ane−θ12n<ane^{-\frac{1}{12 n}}<e^{-\frac{\theta}{12 n}}<1 \Rightarrow a_{n} e^{\frac{1}{12 n}}<a_{n} e^{-\frac{\theta}{12 n}}<a_{n}

那么游戏就进行到了一半,现在可以得出结论: a=ane−θ12n,θ∈(0,1)a=a_{n} e^{-\frac{\theta}{12 n}}, \theta \in(0,1)

把前面的an带进去: n!=aeθ12nnn+12en=an⋅(ne)n⋅eθ12n,0<θ<1n !=\frac{a \mathrm{e}^{\frac{\theta}{12 n}} n^{n+\frac{1}{2}}}{\mathrm{e}^{n}}=a \sqrt{n} \cdot\left(\frac{n}{\mathrm{e}}\right)^{n} \cdot \mathrm{e}^{\frac{\theta}{12 n}}, \quad 0<\theta<1


Wallis圆周率无穷乘积公式: π2=lim⁡n→∞12n+1[2n!!(2n−1)!!]2\frac{\pi}{2}=\lim _{n \rightarrow \infty} \frac{1}{2 n+1}\left[\frac{2 n ! !}{(2 n-1) ! !}\right]^{2}

而 2n!!(2n−1)!!=(2n!!)22n!!(2n−1)!!=(2n!!)22n!=(2n×n!)22n!=22n(n!)22n!\frac{2 n ! !}{(2 n-1) ! !}=\frac{(2 n ! !)^{2}}{2 n ! !(2 n-1) ! !}=\frac{(2 n ! !)^{2}}{2 n !}=\frac{\left(2^{n} \times n !\right)^{2}}{2 n !}=\frac{2^{2 n}(n !)^{2}}{2 n !}

将前面的结论n变成2n: (2n)!=a2n⋅(2ne)2n⋅eθ′24n,0<θ′<1(2 n) !=a \sqrt{2 n} \cdot\left(\frac{2 n}{\mathrm{e}}\right)^{2 n} \cdot \mathrm{e}^{\frac{\theta^{\prime}}{24 n}}, \quad 0<\theta^{\prime}<1

故

=22n(n!)22n!=22n[an⋅(ne)n⋅eθ12n]2a2n⋅(2ne)2n⋅eθ′24n=an2e4θ−θ′24n =\frac{2^{2 n}(n !)^{2}}{2 n !}=\frac{2^{2 n}\left[a \sqrt{n} \cdot\left(\frac{n}{e}\right)^{n} \cdot e^{\frac{\theta}{12 n}}\right]^{2}}{a \sqrt{2 n} \cdot\left(\frac{2 n}{\mathrm{e}}\right)^{2 n} \cdot \mathrm{e}^{\frac{\theta^{\prime}}{24 n}}}=a \frac{\sqrt{n}}{\sqrt{2}} \mathrm{e}^{\frac{4 \theta-\theta'}{24 n}}

带回到极限中: π2=lim⁡n→∞12n+1[an2e4θ−θ′24n]2=lim⁡n→∞12n+1⋅a2⋅n2⋅e4θ−θ′12n=a24\frac{\pi}{2}=\lim _{n \rightarrow \infty} \frac{1}{2 n+1}\left[a \frac{\sqrt{n}}{\sqrt{2}} e^{\frac{4 \theta-\theta^{\prime}}{24 n}}\right]^{2}=\lim _{n \rightarrow \infty} \frac{1}{2 n+1} \cdot a^{2} \cdot \frac{n}{2} \cdot e^{\frac{4 \theta-\theta^{\prime}}{12 n}}=\frac{a^{2}}{4}

所以 a=2πa=\sqrt{2 \pi}

大功告成,代回我们之前的结论: n!=2πn⋅(ne)n⋅eθ12n(0<θ<1)n !=\sqrt{2 \pi n} \cdot\left(\frac{n}{\mathrm{e}}\right)^{n} \cdot \mathrm{e}^{\frac{\theta}{12 n}} \quad(0<\theta<1) 即斯特林公式。

n很大的时候: lim⁡n→+∞n!2πn(ne)n=1\lim _{n \rightarrow+\infty} \frac{n !}{\sqrt{2 \pi n}\left(\frac{n}{e}\right)^{n}}=1

所以 n!≈2πn(ne)nn ! \approx \sqrt{2 \pi n}\left(\frac{n}{e}\right)^{n}


    斯特林公式在理论和应用上都具有重要的价值,对于概率论的发展也有着重大的意义。在数学分析中,大多都是利用Г函数、级数和含参变量的积分等知识进行证明或推导,很为繁琐冗长。近年来,一些国内外学者利用概率论中的指数分布、泊松分布、χ²分布证之。

以下是一个计算斯特林公式的近似值的代码。(使用Python语言):


import math

def stirling_approximation(n):
    return math.sqrt(2 * math.pi * n) * ((n / math.e) ** n)

# 示例使用
n = 5
approximation = stirling_approximation(n)
print(f"Stirling's approximation for {n}! is approximately {approximation}")

    请注意,斯特林公式是一个近似公式,对于较大的n,它的近似值更加准确。