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


