首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复一个循环以进行收敛

重复一个循环以进行收敛
EN

Stack Overflow用户
提问于 2013-12-13 20:47:55
回答 2查看 1.1K关注 0票数 0

我有一个4步的计算,并希望重复2-3步,直到收敛。下面是一个示例:

代码语言:javascript
复制
muh<-t(rnorm(4))
muk<-t(rnorm(4))
Sigmah<-matrix(rnorm(16),4,4)
Sigmak<-matrix(rnorm(16),4,4)
nh<-nk<-25

step1

代码语言:javascript
复制
  muw<-(nh*solve(Sigmah)+nk*solve(Sigmak))^(-1)
    %*%(nh*solve(Sigmah)%*%t(muh)+nk*solve(Sigmak)%*%t(muk))

step2

代码语言:javascript
复制
Sigmahw<-Sigmah+(t(muh)-muw)%*%t(t(muh)-muw)
Sigmakw<-Sigmak+(t(muk)-muw)%*%t(t(muk)-muw)

step3

代码语言:javascript
复制
 muw<-(nh*solve(Sigmahw)+nk*solve(Sigmakw))^(-1)
    %*%(nh*solve(Sigmahw)%*%t(muh)+nk*solve(Sigmakw)%*%t(muk))

如何重复step2和step3,直到SigmahwSigmakw收敛为止?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 21:45:07

代码语言:javascript
复制
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
    }
}

但是,在我运行的几次代码中,您的代码并没有实际收敛,请确保您的公式是正确的。

票数 2
EN

Stack Overflow用户

发布于 2013-12-13 21:17:06

使用repeat语句并使用if检查条件

代码语言:javascript
复制
repeat{
  statements...
  if(condition){
    break
  }
}

您还可以使用while语句

见R文档:http://cran.r-project.org/doc/manuals/R-lang.html#while

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20576130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档