我通过在蒙特卡洛课程中重新做一些作业来教我自己。我在R中构建了一个RANDU生成器,我的任务是序列中的所有三元组(u_i,u_ {i + 1},u_ {i + 2}),其中0.5< = u_ {i + 1}< = 0.51,绘制u_i与u_ {i + 2}。
我在课堂上在MATLAB中做了以下工作,我得到了这个:
这是我在Latex中编写的代码,请注意存储在变量u中的数据只是0到1之间的均匀随机数。
现在我的问题是,我在R
中收到此错误Error in if (0.5 <= u[i + 1] & u[i + 1] <= 0.51) { :
missing value where TRUE/FALSE needed
我不确定这里的问题是什么,这是我的完整R代码:
n = 20002
x <- 1:n
x[1] = 1
for(i in 2:n){
x[i] = (65539*x[i-1]) %% 2^31
}
u <- 1:n
u[1] = 1/(2^31)
for(i in 2:n){
u[i] = x[i]/(2^31)
}
for(i in 1:length(u)){
if(0.5 <= u[i+1] & u[i+1] <= 0.51){
plot(u[i],u[i+2])
}
}
非常感谢任何建议。
答案 0 :(得分:1)
我认为问题出在u
的最后一次观察中。对于您要求评估for
的{{1}}循环。试试这个:
u[i+1]