这是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
答案 0 :(得分:2)
使用零的初始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
答案 1 :(得分:2)
只是做:
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)]
}
}