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