B(Beta)函数定义为:
与函数的关系为:
因此,其计算就直接调用函数 。
不完全B(Beta)函数为:
其中
当 时,可采用连分式计算:
其中:
当 时,则利用对称关系计算:
连分式计算过程:
Public Function betacf(ByVal a As Double, ByVal b As Double, ByVal x As Double) As DoubleDim ITMAX, m, m2 As LongITMAX = 1000Dim EPS, FPMIN, aa, C, d, del, h, qab, qam, qap As DoubleEPS = getGDelta()FPMIN = 0.000000000001qab = abqap = a1#qam = a - 1#C = 1#d = 1# - qab * x / qapIf (Abs(d) < FPMIN) Then d = FPMINd = 1# / dh = dFor m = 1 To ITMAXm2 = 2 * maa = m * (b - m) * x / ((qamm2) * (am2))d = 1#aa * dIf (Abs(d) < FPMIN) Then d = FPMINC = 1#aa / CIf (Abs(C) < FPMIN) Then C = FPMINd = 1# / dh = h * d * Caa = -(am) * (qabm) * x / ((am2) * (qapm2))d = 1#aa * dIf (Abs(d) < FPMIN) Then d = FPMINC = 1#aa / CIf (Abs(C) < FPMIN) Then C = FPMINd = 1# / ddel = d * Ch = h * delIf (Abs(del - 1#) <= EPS) Then Exit ForNextIf (m > ITMAX) Thenbetacf = -1Elsebetacf = hEnd IfEnd Function
不完全B函数计算:
Public Function bata(ByVal a As Double, ByVal b As Double, ByVal x As Double) As DoubleDim bt As DoubleIf (x < 0#) Or (x > 1#) ThenErr.Raise vbObjectError513, , "参数错误! "End IfIf (x = 0#) Or (x = 1#) Thenbt = 0#Elsebt = Exp(lnGamma(ab) - lnGamma(a) - lnGamma(b)a * Log(x)b * Log(1# - x))End IfIf (x < (a1#) / (ab2#)) Thenbata = bt * betacf(a, b, x) / aElsebata = 1# - bt * betacf(b, a, 1# - x) / bEnd IfEnd Function
ExcelStat下载: Excel加载宏ExcelStat.xla
【3 ExcelStat特殊函数计算:不完全贝塔函数】
关注、转载、点赞、收藏?。。?/code>
相关经验推荐
