繁体   English   中英

如何在MS Excel中不均匀地分配随机数?

[英]How to unequally distribute random numbers in MS Excel?

每当我尝试使用RANDBETWEEN(Value1,Value2) ,它几乎均匀地随机分配数字。
如何以不相等的方式生成随机数?
范例-

在此处输入图片说明

上面的公式之间均分配了“是”和“否”。 而且我要的是“是”而不是“否”

使用反函数获得不同的分布。 下面的函数显示了如何将多个逆函数实现为一个

  • 距离=分布类型
  • a,b,c =分布参数,例如最小值,众数,最大值
  • 概率= rand()

如果您传递多个随机值(介于0和1之间),则该函数的结果将以所选分布的形状结束。

Function DistInv(Dist, a, b, c, Prob) As Single
    If Dist = "Single" Then
        ' this is a single value to be used
        DistInv = a

    ElseIf Dist = "Binomial" Then
        ' binomial is like a coin flip. Only has a value of 1 or 0. 'a' determines the cut off point
        If Abs(Prob) > a Then
            DistInv = 0
        Else
            DistInv = 1
        End If

    ElseIf Dist = "Random" Then
        ' uniform distribution between 0% and 100%
        DistInv = Prob

    ElseIf Dist = "Rand Between" Then
        ' uniform distribution between the given parameters
        DistInv = Prob * (b - a) + a

    ElseIf Dist = "Triangular" Then
        ' Triangular distribution with a = lowest value, b = most likely value and c = highest value

        a1 = 1 / ((b - a) * (c - a))
        b1 = -2 * a / ((b - a) * (c - a))
        C1 = a ^ 2 / ((b - a) * (c - a))

        a2 = -1 / ((c - b) * (c - a))
        b2 = 2 * c / ((c - b) * (c - a))
        C2 = ((c - b) * (c - a) - c ^ 2) / ((c - b) * (c - a))

        DistInv = ((-4 * a1 * C1 + 4 * a1 * Prob + b1 ^ 2) ^ (1 / 2) - b1) / (2 * a1)

        If DistInv > b Then
            DistInv = ((-4 * a2 * C2 + 4 * a2 * Prob + b2 ^ 2) ^ (1 / 2) - b2) / (2 * a2)
        End If

    ElseIf Dist = "Norm Between" Then
        ' normal distribution between the given parameters
        DistInv = WorksheetFunction.NormInv(Prob, (a + b) / 2, (b - a) / 3.29)

    ElseIf Dist = "Norm Mean Dev" Then
        ' Normal distribution with the average.norm and standard deviation
        DistInv = WorksheetFunction.NormInv(Prob, a, b)

    ElseIf Dist = "Weibull" Then
        ' Weibull distribution of probability
        '
        ' inverse of Cumulative Weibull Function
        ' for a cumulative Weibull distribution F = 1- exp(-((x-c)/b)^a)
        ' where a is the shape parameter
        '       b is the scale parameter and
        '       c is the offset
        '
        ' then solving for x
        '
        ' x = c + b * (-log(1-Prob))^a

        DistInv = c + b * (-Log(1 - Prob)) ^ (1 / a)

    End If

End Function

您可以通过以下方式使值介于中间的值对您有利: =IF(RANDBETWEEN(1,10)>2,"YES","NO")您可以将>2位更改为1到10之间的任意数字,以确定如何你想两边都走。

要获得两倍“否”的“是

=CHOOSE(RANDBETWEEN(1,3),"Yes","Yes","No")

如果要使用“是”而不是“否”,请在“是”单元格中创建公式RANDBETWEEN(Value1,Value2)+ RANDBETWEEN(Value3,Value4)

尝试ROUND(RANDBETWEEN(RAND(),2),0) ...在1-2间隔中的值将比0-1多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM