【问题标题】:Count iterations计算迭代次数
【发布时间】:2024-01-21 14:50:02
【问题描述】:

我如何在这个迭代中找到 while 循环需要多少次迭代,直到条件不再满足。有多少次迭代被拒绝,多少次被接受?

a=2
b=2
n=10000
M=1.5
X = 0
AR = rep(NA,n)
set.seed(12345)
while (X < n) {
  u = runif(1,0,1)
  y = runif(1)
  if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
    X = X+1
    AR[X] = y
  }
}
AR

【问题讨论】:

    标签: r loops while-loop


    【解决方案1】:

    只需添加计数器变量:

    a=2
    b=2
    n=10000
    M=1.5
    X = 0
    AR = rep(NA,n)
    set.seed(12345)
    i1 <- i2 <- 0
    while (X < n) {
      i1 <- i1 + 1
      u = runif(1,0,1)
      y = runif(1)
      if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
        i2 <- i2 + 1
        X = X+1
        AR[X] = y
      }
    }
    AR
    
    i1
    i2
    

    【讨论】:

      【解决方案2】:

      您需要另一个计数器 iter 进行迭代,例如,

      • while
      iter <- 0
      while (X < n) {
        iter <- iter + 1
        u = runif(1,0,1)
        y = runif(1)
        if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) {
          X = X+1
          AR[X] = y
        }
      }
      
      • repeat
      iter <- 0
      repeat {
        if (X==n) break
        iter <- iter + 1
        u = runif(1,0,1)
        y = runif(1)
        if (u < dbeta(y,2,2)/(M*dunif(y,0,1))) { 
          X = X+1
          AR[X] = y
        }
      }
      

      【讨论】: