我有一个4步计算,想要重复2-3步直到收敛。这是一个例子:
muh<-t(rnorm(4))
muk<-t(rnorm(4))
Sigmah<-matrix(rnorm(16),4,4)
Sigmak<-matrix(rnorm(16),4,4)
nh<-nk<-25
muw<-(nh*solve(Sigmah)+nk*solve(Sigmak))^(-1)
%*%(nh*solve(Sigmah)%*%t(muh)+nk*solve(Sigmak)%*%t(muk))
Sigmahw<-Sigmah+(t(muh)-muw)%*%t(t(muh)-muw)
Sigmakw<-Sigmak+(t(muk)-muw)%*%t(t(muk)-muw)
muw<-(nh*solve(Sigmahw)+nk*solve(Sigmakw))^(-1)
%*%(nh*solve(Sigmahw)%*%t(muh)+nk*solve(Sigmakw)%*%t(muk))
如何重复步骤2和步骤3直到Sigmahw
和Sigmakw
收敛?
答案 0 :(得分:2)
muh<-t(rnorm(4))
muk<-t(rnorm(4))
Sigmah<-matrix(rnorm(16),4,4)
Sigmak<-matrix(rnorm(16),4,4)
nh<-nk<-25
threshold <- 0.1
muw<-(nh*solve(Sigmah)+nk*solve(Sigmak))^(-1)%*%(nh*solve(Sigmah)%*%t(muh)+nk*solve(Sigmak)%*%t(muk))
Sigmahw<-Sigmah+(t(muh)-muw)%*%t(t(muh)-muw)
Sigmakw<-Sigmak+(t(muk)-muw)%*%t(t(muk)-muw)
repeat {
lastSigmahw <- Sigmahw
lastSigmakw <- Sigmakw
muw<-(nh*solve(Sigmahw)+nk*solve(Sigmakw))^(-1)%*%(nh*solve(Sigmahw)%*%t(muh)+nk*solve(Sigmakw)%*%t(muk))
Sigmahw<-Sigmah+(t(muh)-muw)%*%t(t(muh)-muw)
Sigmakw<-Sigmak+(t(muk)-muw)%*%t(t(muk)-muw)
difference <-
norm(Sigmahw - lastSigmahw, type='F') +
norm(Sigmakw - lastSigmakw, type='F')
if (difference < threshold) {
break
}
}
你的代码实际上并没有实际收敛,但确保你的方程是正确的。
答案 1 :(得分:1)
使用repeat
语句并使用if
repeat{
statements...
if(condition){
break
}
}
您还可以使用while
声明
请参阅R文档:http://cran.r-project.org/doc/manuals/R-lang.html#while