在excel中,下面的公式将从均值为10和方差为1的正态分布中生成随机数。是否有一种方法可以设置一个fix种子,从而使我始终得到一个固定的随机数集?我正在使用Excel 2010
=NORMINV(RAND(),10,1)
发布于 2015-10-16 12:05:46
您可以使用电子表格函数实现自己的随机数生成器。例如,C++11有一个名为minstd_rand
的Lehmer随机数发生器,它是通过递归获得的。
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个随机正常变量:
从直方图中可以看出,分布大致是正常的。
发布于 2015-10-16 02:27:17
您可以使用基于Rnd()函数的VBA UDF()。请参见:
发布于 2018-09-08 06:28:59
我不是假装这是一个完美的解决方案,但这对我有效。它的优点是,我可以给一个特定的单元分配一个随机数:
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单元中,但当然可以在任何其他单元中。它还允许我设置最小值和最大值。
https://stackoverflow.com/questions/33161114
复制相似问题