R中的光谱测试

前统科

我想以在[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)

在此处输入图片说明

朱利叶斯·维诺拉(Julius Vainora)

您所拥有的称为一般形式的线性同余生成器

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章