我想以在[0,1] ^ 2图中放置10000点的方式更改代码。我尝试将256更改为10000,但它会产生奇怪的位置。我应该更改系数137和187,但不确定如何更改。有人知道背后的逻辑吗?
工作样本:
nSim = 256
X=rep(0,nSim)
for (i in 2:nSim){
X[i] = (137*X[i-1]+187)%%256
}
plot(X[-1],X[-nSim],col="blue",type="p",pch="x",lwd=2)
我的代码:
nSim = 10000
X=rep(0,nSim)
for (i in 2:nSim){
X[i] = ((137*X[i-1]+187)%%nSim)
}
plot(X[-1]/nSim,X[-nSim]/nSim,col="blue", type="p",pch=20,lwd=2)
您所拥有的称为一般形式的线性同余生成器
X n + 1 =(aX n + c)mod m
目的是选择a,c和m,以使生成的序列尽可能类似于随机序列。没有最好的方法来选择a,c和m,但是有些事情我们可以轻松完成。
你已经选择了M = 10000。然后,我们可以使用一个众所周知的定理(见,例如,该结束后)如何挑选这样a和c,生成的数将开始后才米为重复自己。
条件1:c和m必须是相对素数。我们有m = 10000 = 2 4 5 4。同时,187不能被2或4整除,所以我们很好。
条件2:如果4除以m,则4也需要除以a-1。在我们的情况下,137-1 = 136被4整除:136/4 = 34,所以我们在这里也很好。
条件3:如果任何质数p除以m,则p也需要除以a-1。在上一步中我们已经检查了p = 2,因此剩下p = 5。但是5不除以137-1 = 136!确实,因此,我们得到了
length(unique(X))
# [1] 2000
也就是说,在长度为10000的序列中,我们只有2000个唯一数字,这意味着相同的数字会重复五次。因此,那么我们需要一个a-1将被4和5整除。这提供了很多选择!例如,我们可以选择a = 4 * 5 * 6 +1 = 121。
因此,使用a = 121,c = 187和m = 10000得出
length(unique(X))
# [1] 10000
和一个情节
它仍然有些规律,但绝对比以前更好。您可能会继续尝试满足三个条件的不同的a和c。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句