优秀的编程知识分享平台

网站首页 > 技术文章 正文

ExcelStat特殊函数计算(2):不完全伽马函数

nanyue 2024-09-18 21:32:28 技术文章 6 ℃

不完全 函数定义为:

其互补形式

时,可以利用 的级数展开求不完全 函数:

,可以用如下连分式求解不完全 函数:

求解 的级数形式:

Public Function gammaser(ByVal a As Double, ByVal x As Double) As Double
    Dim EPS, sum, del, ap, lng As Double
    EPS = getGDelta()
    Dim ITMAX, n As Long
    
    ITMAX = 1000
    
    lng = lnGamma(a)
    If x < 0# Then
        gammaser = -1
        Exit Function
    End If
    If x = 0# Then
        gammaser = 0#
        Exit Function
    End If
    If a <= getGDelta() Then
        gammaser = -1
        Exit Function
    End If
    ap = a
    del = 1# / a
    sum = del
    For n = 0 To ITMAX - 1
        ap = ap + 1
        del = del * x / ap
        sum = sum + del
        If (Abs(del) < Abs(sum) * EPS) Then
            gammaser = sum * Exp(-x + a * Log(x) - lng)
            Exit Function
        End If
    Next
    gammaser = 1 / EPS
End Function

求解 的连分式形式:

Public Function gammacf(ByVal a As Double, ByVal x As Double) As Double
    Dim ITMAX, i As Long
    Dim an, b, C, d, del, h, EPS, FPMIN, lng As Double
    
    ITMAX = 1000
    EPS = getGDelta()
    FPMIN = 0.000000000001
    
    lng = lnGamma(a)
    b = x + 1# - a
    C = 1# / FPMIN
    d = 1# / b
    h = d
    For i = 1 To ITMAX
        an = -i * (i - a)
        b = b + 2#
        d = an * d + b
        If (Abs(d) < FPMIN) Then d = FPMIN
        C = b + an / C
        If (Abs(C) < FPMIN) Then C = FPMIN
        d = 1# / d
        del = d * C
        h = h * del
        If (Abs(del - 1#) <= EPS) Then
            Exit For
        End If
    Next
    If i > ITMAX Then
        gammacf = 1# / FPMIN
    Else
        gammacf = Exp(-x + a * Log(x) - lng) * h
    End If
End Function

求解

Public Function gammap(ByVal a As Double, ByVal x As Double) As Double
    
    If (x < 0# Or a <= getGDelta()) Then
        Err.Raise vbObjectError + 513, , "参数错误! "
    End If
    If (x < a + 1#) Then
        gammap = gammaser(a, x)
    Else
        gammap = 1# - gammacf(a, x)
    End If
End Function

getGDelta:获取用户在ExcelSTat中配置的精度。

ExcelStat下载:Excel Stat下载链接 Excel加载宏ExcelStat.xla

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

啥时候才到100粉?求关注。

最近发表
标签列表