jmpamao 发表于 2012-12-19 21:04 
size.norm2
我写的循环如下:
repeat{
fr<-function(lm0){
A<-matrix(rep(0,dm^2),ncol=dm)
for(i in 1:dm)
{
B<-lm0
*Kx0[i,]%*%t(Et0[,i])
A<-B+A
}
X<-M-B
norm(X,"F")^2-ln*sum(w*abs(lm0))}
###optim通过Kx0,Et0初值得到最优lm0
lm1<-optim(lm0,fr)
###奇异值分解利用lm1与Kx0得到Et1
Et1<-svd(M%*%Kx0%*%diag(lm1[[1]]))$u%*%t(svd(M%*%Kx0%*%diag(lm1[[1]]))$v)
###奇异值分解利用lm1与Et0得到Kx1
Kx1<-svd(M%*%Et0%*%diag(lm1[[1]]))$u%*%t(svd(M%*%Et0%*%diag(lm1[[1]]))$v)
##反复迭代直至收敛
if(sum(abs(lm0-lm1[[1]]))<=eps) break
lm0<-lm1[[1]]
Et0<-Et1
Kx0<-Kx1 }
其中lm0,Et0,Kx0,是需要迭代至收敛的向量,矩阵,矩阵。
在程序中,我先控制lm0试了下,可是还是报错了,我eps取1
报错如下:
Error in optim(lm0, fr) : non-finite value supplied by optim