为excel随机数设置种子

时间:2015-10-16 01:27:29

标签: random excel-2010 random-seed

在excel下面的公式将从正态分布生成随机数,平均值为10,方差为1。有没有办法设置修复种子,以便我一直得到一组随机数?我正在使用Excel 2010

=NORMINV(RAND(),10,1)

4 个答案:

答案 0 :(得分:19)

您可以使用电子表格功能实现自己的随机数生成器。例如,C ++ 11有一个名为minstd_rand的{​​{3}},它是通过重复获得的

X = X*g (mod m)

其中g = 48271m = 2^31-1

A1中,您可以放置​​种子值。在A2中输入公式:

=MOD(48271*A1,2^31-1)

并将其复制到你需要的地方。

B2输入=A2/(2^31-1)C2输入=NORM.INV(B2,10,1),根据需要进行复制。请注意,您始终可以通过

替换A1中的种子值
=RANDBETWEEN(0,2^31-2)

如果你想重新打开易失性随机性。

以下屏幕截图显示了以这种方式生成的25个随机正常变量:

Lehmer random number generator

从直方图可以看出,分布似乎大致正常。

答案 1 :(得分:2)

您可以使用基于Rnd()函数的 VBA UDF()。参见:

Repeating random variables in VBA

答案 2 :(得分:2)

我并不假装这是一个完美的解决方案,但这对我有用。 这样做的好处是,我可以为特定的单元格分配一个随机数:

Public Function GetRandom(seed As Double, min As Double, max As Double) As Double
    Dim colrow As Double
    Dim range As Double

    range = max - min
    If (Application.Caller.Column() = Application.Caller.Row()) Then
        colrow = (Log(Application.Caller.Column() + 1) * Log(Application.Caller.Row() + 1)) * seed
    Else
        colrow = (Log(Application.Caller.Column() + 1) / Log(Application.Caller.Row() + 1)) * seed
    End If
    Rnd (-1)
    Randomize colrow 
    test = Rnd * range - range / 2
    GetRandom = colrow 
End Function

用法:

=GetRandom($Z$1,1,-1)

在我的示例中,种子值在 Z1 单元格中,但是in可以在其他任何单元格中使用。它还允许我设置最小值和最大值。

enter image description here

答案 3 :(得分:1)

一个实用的解决方案是将样本中的值复制到新范围内。

相关问题