我有一个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<-25step1
muw<-(nh*solve(Sigmah)+nk*solve(Sigmak))^(-1)
%*%(nh*solve(Sigmah)%*%t(muh)+nk*solve(Sigmak)%*%t(muk))step2
Sigmahw<-Sigmah+(t(muh)-muw)%*%t(t(muh)-muw)
Sigmakw<-Sigmak+(t(muk)-muw)%*%t(t(muk)-muw)step3
muw<-(nh*solve(Sigmahw)+nk*solve(Sigmakw))^(-1)
%*%(nh*solve(Sigmahw)%*%t(muh)+nk*solve(Sigmakw)%*%t(muk))如何重复step2和step3,直到Sigmahw和Sigmakw收敛为止?
发布于 2013-12-13 21:45:07
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
}
}但是,在我运行的几次代码中,您的代码并没有实际收敛,请确保您的公式是正确的。
发布于 2013-12-13 21:17:06
使用repeat语句并使用if检查条件
repeat{
statements...
if(condition){
break
}
}您还可以使用while语句
见R文档:http://cran.r-project.org/doc/manuals/R-lang.html#while
https://stackoverflow.com/questions/20576130
复制相似问题