[英]Poisson Distribution Function infinite loop
我有以下代碼試圖模擬金屬原子在冷基板上的沉積; 但是,它以無限循環運行。
有人可以看到我在哪里犯錯嗎?
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)
沒有無限循環問題。
這很容易檢查是否繼續使用較小的l
, n
和e
參數運行代碼。 當增加任何提及的參數時,您的代碼將進行次優縮放(在這種情況下為超線性)。
明顯點:
lsize
。 runif()
。 您不必調用同一函數數千次。 在循環外調用一次以生成所需的隨機數,然后在循環內調用行中的下一個元素。 print
和cat
語句打印出您使用的循環計數器。 嘗試使用較小的值,以確保他們編程的內容可以滿足您的要求,然后將計數器設置為數千。 a < 0.5
至等於4
沒有理由遍歷的所有元素a
順序。 a[ a < 0.5] = 4
就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.