欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    vb版GammaDist()和GammaInv()两函数的代码.doc

    • 资源ID:82386000       资源大小:33.54KB        全文页数:6页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    vb版GammaDist()和GammaInv()两函数的代码.doc

    vb版GammaDist()和GammaInv()两函数的代码从matlab里翻译过来的 GammaDist(x,a,b,true):'%GAMCDF Gamma cumulative distribution function。'   P = GAMCDF(X,A,B) returns the gamma cumulative distribution'%   function with parameters A and B at the values in X.Public Function GamCdf(x, a, b)    对应excel中GammaDist(x,a,b,true)函数,计算S曲线    If a = 0 Or b = 0 Then GammCdf = ”NaN"    GamCdf = GAMMAINC(x / b, a)    p = IIf(p 1, 1, p)End Function%GAMMAINC Incomplete gamma function。%   Y = GAMMAINC(X,A) evaluates the incomplete gamma function for'   corresponding elements of X and A.  X and A must be real and the same   size (or either can be a scalar).  A must also be nonnegative.%   The incomplete gamma function is defined as:'http:/zanjero。%    gammainc(x,a) = 1 ./ gamma(a) .'       integral from 0 to x of t(a-1) exp(-t) dt'   For any a>=0, as x approaches infinity, gammainc(x,a) approaches 1.'%   For small x and a, gammainc(x,a) = xa, so gammainc(0,0) = 1。Public Function GAMMAINC(x, a)Dim amax As Double    amax = 2 20    ascalar = 1    If a = amax Then        If a 0 And x > 0 And x a + 1 Then            xk = x            ak = a            ap = ak            Sum = 1 / ap            del = Sum            Dim i As Double            For i = 1 To 10000                ap = ap + 1                del = xk del / ap                Sum = Sum + del            Next            GAMMAINC = Sum Exp(-xk + ak Log(xk) GAMMALN(ak)        ElseIf a < 0 And x 0 And x >= a + 1 Then            xk = x            a0 = 1            a1 = x            b0 = 0            b1 = a0            ak = a            fac = 1            n = 1            g = b1            gold = b0            For i = 1 To 10000                gold = g                ana = n ak                a0 = (a1 + a0 ana) * fac                b0 = (b1 + b0 ana) fac                anf = n * fac                a1 = xk a0 + anf a1                b1 = xk b0 + anf b1                fac = 1 / a1                g = b1 * fac                n = n + 1            Next            GAMMAINC = 1 - Exp(-xk + ak Log(xk) - GAMMALN(ak) * g        End If    Else    End IfEnd Function'*'GAMMALN Logarithm of gamma function.%   Y = GAMMALN(X) computes the natural logarithm of the gamma'%   function for each element of X.  GAMMALN is defined as%       LOG(GAMMA(X))'%   and is obtained without computing GAMMA(X)。  Since the gamma'%   function can range over very large or very small values, its   logarithm is sometimes more useful.  http:/zanjero.ygblog。com/Public Function GAMMALN(XX)Dim COF(6) As Double, stp As Double, half As Double, one As DoubleDim fpf As Double, x As Double, tmp As Double, ser As DoubleDim j As Integer    COF(1) = 76。18009173    COF(2) = 86。50532033    COF(3) = 24.01409822    COF(4) = -1。231739516    COF(5) = 0.00120858003    COF(6) = 0.00000536382    stp = 2.50662827465    half = 0.5    one = 1#    fpf = 5.5    x = XX - one    tmp = x + fpf    tmp = (x + half) * Log(tmp) - tmp    ser = one    For j = 1 To 6        x = x + one        ser = ser + COF(j) / x    Next j    GAMMALN = tmp + Log(stp ser)End FunctionGammaInv:(要调用上面的GamCdf和GAMMALN函数)GAMINV Inverse of the gamma cumulative distribution function (cdf).%   X = GAMINV(P,A,B)  returns the inverse of the gamma cdf with%   parameters A and B, at the probabilities in P。  http:/zanjero。ygblog。com/'对应Excel中GammaInv(p,a,b)函数,计算P的p值   pCs/2GammaInv(1-p/100,4/Cs2,1)2/CsPublic Function gaminv(p, a, b)    If p < 0 Or p > 1 Or a = 0 Or b = 0 Then        gaminv = ”NaN”        Exit Function    Else        Select Case p        Case 0            gaminv = 0        Case 1            gaminv = 1        Case Else             Newton's Method            ' Permit no more than count_limit interations。            count_limit = 100            cunt = 0            pk = p            ' Supply a starting guess for the iteration。            '   Use a method of moments fit to the lognormal distribution。            mn = a * b            v = mn * b            temp = Log(v + mn 2)            mu = 2 * Log(mn) - 0.5 * temp            sigma = 2 Log(mn) + temp            xk = Exp(MyNormInv(pk, mu, sigma))    ''''''''''''            h = 1            ' Break out of the iteration loop for three reasons:            '%  1) the last update is very small (compared to x)            '%  2) the last update is very small (compared to sqrt(eps)            '%  3) There are more than 100 iterations. This should NEVER happen.            eps = 2 10            Do While Abs(h) eps 0.5 Abs(xk) And Abs(h) eps 0.5 And cunt count_limit                cunt = tunt + 1                h = (GamCdf(xk, a, b) - pk) / gampdf(xk, a, b)    '''''                xnew = xk h                    % Make sure that the current guess stays greater than zero.                '    When Newtons Method suggests steps that lead to negative guesses                    % take a step 9/10ths of the way to zero:                If xnew 0 Then                    xnew = xk / 10                    h = xk - xnew                End If                xk = xnew            Loop            gaminv = xk        End Select    End IfEnd Function This function is a replacement for the Microsoft Excel Worksheet function NORMSINV.' It uses the algorithm of Peter J. Acklam to compute the inverse normal cumulative distribution。 Refer to http:/home.online.no/pjacklam/notes/invnorm/index。html for a description of the algorithm。 ' Adapted to VB by Christian dHeureuse, http:/zanjero。ygblog。com/.Public Function MyNormSInv(ByVal p As Double)    '计算频率格纸Const a1 = 39.6968302866538, a2 = 220.946098424521, a3 = 275.928510446969Const a4 = 138.357751867269, a5 = 30.6647980661472, a6 = 2。50662827745924Const b1 = -54.4760987982241, b2 = 161.585836858041, b3 = 155。698979859887Const b4 = 66。8013118877197, b5 = -13.2806815528857, c1 = -7。78489400243029E-03Const c2 = 0.322396458041136, c3 = 2。40075827716184, c4 = 2.54973253934373Const c5 = 4。37466414146497, c6 = 2.93816398269878, d1 = 7.78469570904146E03Const d2 = 0.32246712907004, d3 = 2.445134137143, d4 = 3。75440866190742Const p_low = 0.02425, p_high = 1 p_lowDim q As Double, r As Double    If p < 0 Or p 1 Then        Err.Raise vbObjectError, , ”NormSInv: Argument out of range。"    ElseIf p p_low Then        q = Sqr(2 Log(p)        MyNormSInv = ((c1 * q + c2) * q + c3) * q + c4) q + c5) * q + c6) / _                ((d1 * q + d2) q + d3) q + d4) * q + 1)    ElseIf p = p_high Then        q = p 0.5: r = q * q        MyNormSInv = ((a1 r + a2) r + a3) r + a4) * r + a5) * r + a6) * q / _                ((((b1 r + b2) r + b3) r + b4) * r + b5) r + 1)    Else        q = Sqr(2 Log(1 - p)        MyNormSInv = -(((c1 q + c2) * q + c3) * q + c4) q + c5) * q + c6) / _                (((d1 q + d2) * q + d3) q + d4) * q + 1)    End IfEnd FunctionGAMPDF Gamma probability density function.'%   Y = GAMPDF(X,A,B) returns the gamma probability density function'%   with parameters A and B, at the values in X. http:/zanjero.ygblog。com/Public Function gampdf(x, a, b)    y = 0    If x = 0 And a 1 Then        gampdf = ”"        Exit Function    End If    If x = 0 And a = 1 Then        gampdf = 1 / b        Exit Function    End If    If a = 0 Or b = 0 Then        y = "NaN”        gampdf = y        Exit Function    ElseIf x 0 Then        y = (a 1) * Log(x) x / b GAMMALN(a) - a Log(b)        y = Exp(y)    End If    gampdf = yEnd Function

    注意事项

    本文(vb版GammaDist()和GammaInv()两函数的代码.doc)为本站会员(可****阿)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开