VBA产生正态分布随机数NormalRand

分类:代码, 博客 标签:,

很多智能算法中经常需要产生正态分布的随机数来进行诸如领域搜索等功能,而在水文模拟中也可能需要产生一个正态分布的随机数列,这里在VBA中实现了一个正态分布随机数产生器,可以生成均值为0,方差为1.0的正态分布随机数生成,如果需要生成均值为Ex,方差为Cv的随机数可以使用 Ex + NormalRand()*Cv 来实现。具体VBA代码如下:

'================================
' 正态分布随机数产生
' 产生均值为0,方差为1.0的正态分布随机数
' http://www.cnhup.com
'================================
Function NormalRand() As Double
    Dim fac As Double, rsq As Double, v1 As Double, v2 As Double
    Static flag As Boolean, gset As Double
    
    If flag Then
        NormalRand = gset
        flag = False
    Else
        Do
            v1 = 2 * Rnd - 1#
            v2 = 2 * Rnd - 1#
            rsq = v1 * v1 + v2 * v2
        Loop Until rsq <= 1#
        
        fac = Sqr(-2# * Log(rsq) / rsq)
        
        NormalRand = v2 * fac
        gset = v1 * fac
        flag = True
    End If    
End Function


分类:代码, 博客 标签:,

发表评论

You must be logged in to post a comment.