- Как начать цикл с первого предположения? - PullRequest
1 голос
/ 25 сентября 2010

Это материал Comp Sci 101, но я не смог найти ответ, применимый к R (или Matlab).

У меня есть цикл for, который я хочу инициализировать первым предположением (все нули здесь, но, возможно, что-то еще позже), но я хочу продолжать обновляться с каждой итерацией. То, что я имею ниже, работает, но это отчасти неуклюже и смущает.

Я бы хотел избежать одной итерации до цикла for. Я мог бы сделать это с 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 ]

2 голосов
/ 25 сентября 2010

Просто сделай:

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)]
    }
}
2 голосов
/ 25 сентября 2010

Инициализируйте v[1,] с нулями, удалите первый цикл и зафиксируйте i index в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...