泊松分布函数无限循环

时间:2015-10-24 22:25:41

标签: r

我有以下代码试图模拟金属原子沉积在冷基板上;但是,它在无限循环中运行。

任何人都可以看到我犯错的地方吗?

l <- 20
n <- 2000
e <- 1000
lsize <- matrix(0,l,l)
deposits <- rep(0,n)
avg.deposits <- rep(0,n)
prob <- rep(0,n)
n.deposits <- rep(0,n)
for(m in 1:e){
  for(j in 1:l){
    for(k in 1:l){
      lsize[j,k] <- 0
    }
  }
  for(i in 1:n){
    ra <- runif(1)
    x <- floor(1+l*ra)
    ra <- runif(1)
    y <- floor(1+l*ra)
    lsize[x,y] <- lsize[x,y]+1
    s <- 0
    for(j in 1:l){
      for(k in 1:l){
        if(lsize[j,k] <- 1){
          s <- s+1
        }
      }
    }
    n.deposits[i] <- n.deposits[i]+s
  }
}
for(i in 1:n){
  avg.deposits[i] <- n.deposits[i]/e
  prob[i] <- avg.deposits[i]/(l*l)
  deposits[i] <- i
}
plot(deposits, prob)

1 个答案:

答案 0 :(得分:1)

没有无限循环问题。

如果您继续使用较小的property2var fb = new Firebase("http://a_firebase.firebaseio.com"); var ref = fb.child("/path/to/child"); var newPriority = (new Date()).getTime(); //timestamp, as you mentioned var data = { "property1": {".value": "updated_val", ".priority": newPriority}, "property2": {".value": "updated_val2", ".priority": newPriority}, ".priority": newPriority } ref.update(data); l参数运行代码,则很容易检查。在增加任何提到的参数时,您的代码会以次优(在这种情况下为超线性)进行扩展。

明显的观点:

  1. 预分配矩阵。不要一次又一次地在每个循环中分配n
  2. 限制您的函数调用;在这种情况下,e。您不必多次调用相同的函数。在循环外调用一次以生成所需的随机数,然后在循环中只访问行中的下一个元素。
  3. 使用lsizerunif()语句打印出您使用的循环计数器。尝试使用小值来确保他们的程序符合您的要求,然后将计数器设置为数千个。
  4. 尽可能向您的代码进行矢量化。例如。如果&#39; a = runif(100)&#39;并且您希望设置print等于cat的所有实例,没有理由按顺序遍历a < 0.5的所有元素。 4就够了。