函数定义为:

函数为阶乘的推广:。

函数计算有很多方法,介于统计计算并不需要很高的精度,ExcelStat采用Lanczos近似方法(Lanczos,C.1964,SIAM Journal on Numerical Analysis,ser.B.val,pp.86-96),可以达到10^(-10)数量级的近似精度:

Public Function lnGamma(ByVal x As Double) As Double Dim j As Long Dim xx, y, tmp, S As Double Dim Cof xx = x y = x tmp = x + 5.5 tmp = tmp - (x + 0.5) * Log(tmp) Cof = Array(76.1800917294715, -86.5053203294168, 24.0140982408309, -1.23173957245015, 1.20865097386618E-03, 5.395239384953E-06) S = 1.00000000019001 For j = 0 To 5 Step 1 y = y + 1 S = S + Cof(j) / y Next j lnGamma = -tmp + Log(2.506628274631 * S / x) End Function

本人并不精通VBA语言,只是初步了解一些简单的语法,大多数情况就是写一段代码,测试通过就OK了。如果有表达不对的地方,请批评指正!

ExcelStat下载: Excel加载宏ExcelStat.xla

关注、转载、点赞、收藏!!!