Random 设置excel随机数的种子

Random 设置excel随机数的种子,random,excel-2010,random-seed,Random,Excel 2010,Random Seed,在excel中,以下公式将从平均值为10、方差为1的正态分布生成随机数。有没有办法设定一个固定种子,这样我就可以一直得到一组固定的随机数?我正在使用Excel 2010 =NORMINV(RAND(),10,1) 可以使用基于Rnd()函数的VBAUDF()。见: 您可以使用电子表格功能实现自己的随机数生成器。例如,C++11有一个名为minstd\u rand的函数,它是通过递归获得的 X = X*g (mod m) 其中g=48271和m=2^31-1 在A1中,可以放置种子值。在A2中

在excel中,以下公式将从平均值为10、方差为1的正态分布生成随机数。有没有办法设定一个固定种子,这样我就可以一直得到一组固定的随机数?我正在使用Excel 2010

=NORMINV(RAND(),10,1)

可以使用基于Rnd()函数的VBAUDF()。见:


您可以使用电子表格功能实现自己的随机数生成器。例如,C++11有一个名为
minstd\u rand
的函数,它是通过递归获得的

X = X*g (mod m)
其中
g=48271
m=2^31-1

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

=MOD(48271*A1,2^31-1)
不管你需要多远,把它抄下来

B2
中输入
=A2/(2^31-1)
并在
C2
中输入
=NORM.INV(B2,10,1)
,根据需要进行复制。请注意,始终可以将
A1
中的种子值替换为

=RANDBETWEEN(1,2^31-2)
如果要重新启用易失性随机性

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


从柱状图中可以看出,分布似乎大致正常。

我不是在假装这是一个完美的解决方案,但这对我来说是可行的。 它的美妙之处在于,我可以将一个随机数分配给一个特定的单元格:

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可以位于任何其他单元格中。它还允许我设置最小值和最大值


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

有参考文献表明没有这种方法。你只是想得到一组非易失性的随机数,还是真的需要控制种子?那么,我应该使用哪个值作为随机数?我想B列中的数字是正确的:如果你想要一个均匀的随机分布,选择B列。