不完全 函数定义为:
其互补形式
当 时,可以利用 的级数展开求不完全 函数:
当,可以用如下连分式求解不完全 函数:
求解 的级数形式:
Public Function gammaser(ByVal a As Double, ByVal x As Double) As DoubleDim EPS, sum, del, ap, lng As DoubleEPS = getGDelta()Dim ITMAX, n As LongITMAX = 1000lng = lnGamma(a)If x < 0# Thengammaser = -1Exit FunctionEnd IfIf x = 0# Thengammaser = 0#Exit FunctionEnd IfIf a <= getGDelta() Thengammaser = -1Exit FunctionEnd Ifap = adel = 1# / asum = delFor n = 0 To ITMAX - 1ap = ap1del = del * x / apsum = sumdelIf (Abs(del) < Abs(sum) * EPS) Thengammaser = sum * Exp(-xa * Log(x) - lng)Exit FunctionEnd IfNextgammaser = 1 / EPSEnd Function
求解 的连分式形式:
Public Function gammacf(ByVal a As Double, ByVal x As Double) As DoubleDim ITMAX, i As LongDim an, b, C, d, del, h, EPS, FPMIN, lng As DoubleITMAX = 1000EPS = getGDelta()FPMIN = 0.000000000001lng = lnGamma(a)b = x1# - aC = 1# / FPMINd = 1# / bh = dFor i = 1 To ITMAXan = -i * (i - a)b = b2#d = an * dbIf (Abs(d) < FPMIN) Then d = FPMINC = ban / CIf (Abs(C) < FPMIN) Then C = FPMINd = 1# / ddel = d * Ch = h * delIf (Abs(del - 1#) <= EPS) ThenExit ForEnd IfNextIf i > ITMAX Thengammacf = 1# / FPMINElsegammacf = Exp(-xa * Log(x) - lng) * hEnd IfEnd Function
求解:
Public Function gammap(ByVal a As Double, ByVal x As Double) As DoubleIf (x < 0# Or a <= getGDelta()) ThenErr.Raise vbObjectError513, , "参数错误! "End IfIf (x < a1#) Thengammap = gammaser(a, x)Elsegammap = 1# - gammacf(a, x)End IfEnd Function
getGDelta:获取用户在ExcelSTat中配置的精度 。
ExcelStat下载: Excel加载宏ExcelStat.xla
关注、转载、点赞、收藏?。。?/b>
【2 ExcelStat特殊函数计算:不完全伽马函数】啥时候才到100粉?求关注 。
