随笔-20  评论-16  文章-36  trackbacks-0

【Stirling公式】

lim(n→∞) √(2πn) * n^n * e^(-n) / n! = 1, 也就是说当n很大的时候,n!与√(2πn) * n^n * e^(-n)的值十分接近, 这就是Stirling公式.

 

【Stirling公式的证明】

令a(n)=n! / [ n^(n+1/2) * e^(-n) ]

则a(n) / a(n+1) = (n+1)^(n+3/2) / [ n^(n+1/2) * (n+1) * e ] = (n+1)^(n+1/2) / [ n^(n+1/2) * e]
                                                                                           =(1+1/n)^n * (1+1/n)^1/2 *1/e
       当n→∞时,(1+1/n)^n→e,(1+1/n)^1/2→1
  即lim(n→∞) a(n)/a(n+1)=1
    所以lim(n→∞)a(n) 存在
  设A=lim(n→∞)a(n)
  A=lim(n→∞)n! / [ n^(n+1/2) * e^(-n) ]
  利用Wallis公式,π/2 = lim(n→∞)[ (2n)!! / (2n-1)!! ]^2 / (2n+1)
  π/2 = lim(n→∞)[ (2n)!! / (2n-1)!! ]^2 / (2n+1)
        =lim(n→∞)[ (2n)!! * (2n)!! / (2n)! ]^2 / (2n+1)
        =lim(n→∞) 2^(4n) [ (n!)^2 / (2n)! ]^2 / (2n+1)
        =lim(n→∞) 2^(4n) [ (A * n^(n+1/2) * e^(-n) )^2 / (A * (2n)^(2n+1/2) * e^(-2n) )]^2 / (2n+1)
        =lim(n→∞) 2^(4n) [ 2^(-2n-1/2) * A * √n ]^2 / (2n+1)
        =lim(n→∞) 2^(4n) * A^2 * 2^(-4n-1) * n/(2n+1)
        =A^2 / 4
   所以A=√(2π)
   lim(n→∞)n! / [ n^(n+1/2) * e^(-n) ] = √(2π)
   即lim(n→∞) √(2πn) * n^n * e^(-n) / n! = 1

 

【Stirling公式的意义】

Stirling公式的意义在于:当n足够大之后n!计算起来十分困难,虽然有很多关于n!的不等式,但并不能很好的对阶乘结果进行估计,尤其是n很大之后,误差将会非常大.但利用Stirling公式可以将阶乘转化成幂函数,使得阶乘的结果得以更好的估计.而且n越大,估计得就越准确.

(以上来自百度百科)
补充:
用Stirling公式计算n!结果的位数时,可以两边取对数,得:
log10(n!) = log10(2*PI*n)/2+n*log10(n/E);
故n!的位数为 log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)

n的位数为[lg10(n)]+1
n!的位数为[lg10(n*(n-1)*(n-2)*…..*1)]+1=[lg10(n)+lg10(n-1)+lg10(n-2)+….+lg10(1)]+1

高德纳的《计算机程序设计艺术》中,
n! = sqrt(2*π*n) * ((n/e)^n) * (1 + 1/(12*n) + 1/(288*n*n) + O(1/n^3))

posted on 2009-03-13 14:11 古月残辉 阅读(6134) 评论(0)  编辑 收藏 引用 所属分类: Theory

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理