【发布时间】:2017-06-24 22:21:27
【问题描述】:
我目前拥有的:
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
如果 U > d ,则返回 a + ( c - a ) × (1 - sqr((1- d )×(1-U))) 作为随机数。
参数 a 和 c 分别是最小和最大可能值,并且 参数 b 是最可能的值(您可以看到三角形中的最高点)。
我不确定如何创建此功能,想知道是否有人可以帮忙?在处理函数时,我意识到我需要使用 randomize 函数,以便在每次调用函数时不生成类似的结果,以及 application.volatile 操作。
【问题讨论】:
标签: excel vba function distribution triangular