我目前拥有的:
Option Explicit
Function Triangular(a As Double, b As Double, c As Double) As Double
Randomize
Application.Volatile
Dim d As Double
Dim uniform As Double
Dim retval as Double
d = (b - a) / (c - a)
uniform = Rnd()
If uniform <= d Then
Triangular = a + (c - a) * Sqr(d * uniform)
Else
Triangular = a + (c - a) * (1 - Sqr(1 - d) * (1 - uniform))
End If
End Function
我在 VBA 中创建三角分布函数时遇到了麻烦,该函数根据以下参数计算随机数:
计算 d = ( b - a )/( c - a )
使用 VBA 的 Rnd 函数生成一个介于 0 和 1 之间的均匀分布的随机数 U。
如果 U <= d,则返回 a + ( c - a ) × sqr(d×U) 作为随机数。(Sqr(x) 是一个 VBA 函数,它返回 x 的平方根。
如果 U > d ,则返回 a + ( c - a ) × (1 - sqr((1- d )×(1-U))) 作为随机数。
参数 a 和 c 分别是最小和最大可能值,参数 b 是最可能的值(您可以看到三角形中的高点)。
我不确定如何创建此功能,并且想知道是否有人可以伸出援手?在处理函数时,我意识到我需要使用 randomize 函数,以便在每次调用函数时不生成类似的结果,以及 application.volatile 操作。