函数定义为:
函数为阶乘的推广:。
函数计算有很多方法,介于统计计算并不需要很高的精度,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
关注、转载、点赞、收藏!!!
