R中的光谱测试
我希望更改代码,使10000点放置在[0,1]^2绘图中。我尝试将256更改为10000,但它会生成奇怪的位置。我应该改变因子137和187,但不确定如何改变它。有人知道背后的逻辑吗 工作样本:R中的光谱测试,r,random,plot,spectral,R,Random,Plot,Spectral,我希望更改代码,使10000点放置在[0,1]^2绘图中。我尝试将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 = 10
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)
这里有一个一般形式的线性同余生成器 Xn+1=(aXn+c)模块m 目标是选择这样的a、c和m,以使生成的序列尽可能类似于随机序列。没有最好的方法来选择a、c和m,但是我们可以很容易地做一些事情 您已经选择了m=10000。然后,我们可以使用一个众所周知的定理(例如,见本文末尾)来选择这样的a和c,即生成的数字只在m步之后才会开始重复 条件1:c和m需要相对素数。我们有m=10000=2454。同时,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进行实验