アットウィキロゴ
 
#k <- 2; # k=rank(A)として,上位k個の特異値のみを使って,US(V)tを掛け合わせる
print("SVD Start!!")
k <- qr(A)$rank; #ランク数に応じて最小二乗誤差を求める
#k <- 1;
print(k)
A <- read.delim("sample.txt",F);

#print(A);
R <- svd(A);
R$u %*% diag(R$d) %*% t(R$v);
U <- R$u;
#U1 <- U[,1:(ncol(U)-k),drop=F]      # m × (n-k) の行列U1を生成
U1 <- U[,1:k,drop=F]

#print("print U");

S <- diag(R$d);
S1 <- S[1:k,1:k,drop=F]  #rank(A)=k  k × k の正方行列の作成

V <- R$v;
#V1 <- V[,1:(ncol(V)-k),drop=F]     # m × (n-k) の行列U1を生成
V1 <- V[,1:k,drop=F]

old <- U %*% S %*% t(V);
new <- U1 %*% S1 %*% t(V1);

#print(old)
cat("\n")
#print(new)

write.table(new,"result.txt",row.names = F, col.names=F, quote=F)
write.table(old,"old.txt",row.names = F, col.names=F, quote=F)
最終更新:2007年11月07日 22:26