代码之家  ›  专栏  ›  技术社区  ›  Richard Herron

-如何用第一个猜测开始一个循环?

  •  1
  • Richard Herron  · 技术社区  · 14 年前

    这是comp sci 101的东西,但我找不到适用于r(或matlab)的答案。

    我有一个 for 循环,我想用第一个猜测来初始化(这里所有的0,稍后可能还有其他的东西),但我想在每次迭代中不断更新。我下面的内容很有效,但有点笨拙和尴尬。

    我想避免在 对于 循环。我可以用一个 ifelse 在循环内部,但这似乎效率低下。谢谢!

    alpha <- 0.3
    beta <- 0.6
    m <- 5 # elements in k
    n <- 10 # iterations
    k.prime <- v <- matrix(0, n, m)
    k <- seq(from=0.04, to=0.2, length.out=m) # poss values for k
    colnames(v) <- colnames(k.prime) <- round(k, digits=2)
    
    # first loop for taking the first guess for v()
    i <- 1
    for (j in 1:m) {
        temp.v <- log(k[j]^alpha - k) + beta*rep(0, times=m)
        v[i, j] <- max(temp.v)
        k.prime[i, j] <- k[which.max(temp.v)]
    }
    
    # remaining loops
    for (i in 2:n) {
        for (j in 1:m) {
            temp.v <- log(k[j]^alpha - k) + beta*v[i-1, ]
            v[i, j] <- max(temp.v)
            k.prime[i, j] <- k[which.max(temp.v)]
        }
    }
    
    v 
    k.prime
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   mbq    14 年前

    初始化 v[1,] 使用零,删除第一个循环并修复 i 索引到 i+1 其他地方。
    然后应该如下所示:

    alpha<-0.3
    beta<-0.6
    m<-5 #elements in k
    n<-10 #iterations
    k.prime<-matrix(0,n,m);
    v<-matrix(0,n+1,m);
    k<-seq(from=0.04,to=0.2,length.out=m) #poss values for k
    colnames(v)<-colnames(k.prime)<-round(k,digits=2)
    
    
    v[1,]<-rep(0,m);
    
    # remaining loops
    for(i in 1:n){
        for(j in 1:m){
            temp.v<-log(k[j]^alpha-k)+beta*v[i,]
            v[i+1,j]<- max(temp.v)
            k.prime[i,j]<-k[which.max(temp.v)]
        }
    }
    v[-1,]->v; #Cleanup of 0-row
    
    v 
    k.prime
    
        2
  •  2
  •   Loïc Février    14 年前

    只要做:

    for (i in 1:n) {
        for (j in 1:m) {
            if (i == 1) 
                temp.v <- log(k[j]^alpha - k) + beta*rep(0, times=m)
            else
                temp.v <- log(k[j]^alpha - k) + beta*v[i-1, ]
            v[i, j] <- max(temp.v)
            k.prime[i, j] <- k[which.max(temp.v)]
        }
    }