如何解决在Excel VBA中高效生成快速正态分布的随机数
我一直在寻找一种快速且可靠的方式来生成正态分布的随机数。
最流行的方法似乎是将Excel工作表函数Norm_Inv与随机数一起使用,但是由于需要在Excel和VBA之间来回移动,因此这非常慢。
我在下面分享我的解决方案,但是如果有更好的解决方案,我很想知道。
解决方法
此解决方案非常快速且准确,可满足您的需求。最初,您将间隔0-1分为大量切片,并调用NORM_INV以获取每个点的正态分布值,并将这些值存储在数组中。之后,您无需再调用NORM_INV,只需查找数组值即可获取任何随机数。
直接使用NORM_INV,1000个切片似乎足以提供99%+的相关性。
Function NormalRandLookup(Optional Mean As Single = 0,Optional StdDev As Single = 1) As Single
Static R() As Single,n As Long
If n = 0 Then 'set up the lookup table initially
Dim i As Long
n = 1000 'vary this to reduce or increase accuracy
ReDim R(0 To n)
R(0) = -3.3: R(n) = 3.3 'the extreme values returned by NORM_INV for 0 and 1
For i = 1 To n - 1
R(i) = Application.WorksheetFunction.Norm_Inv(i / n,1)
Next i
End If
NormalRandLookup = Mean + StdDev * R(Rnd * n)
End Function
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。