特異値分解の検算

すぐ忘れる。 svd関数の戻り値をxとして x$u %*% diag(x$d) %*% t(x$v) で元通り。

> b <- array(rnorm(10), dim=c(5,2))
> b
           [,1]         [,2]
[1,] -0.5036082 -1.218417405
[2,] -0.7905285  1.331412278
[3,]  0.8311744 -0.147847237
[4,] -0.8628976  0.681707538
[5,] -1.1254487 -0.007460698
> b_svd <- svd(b)
> u <- b_svd$u
> v <- b_svd$v
> sigma <- diag(b_svd$d)
> u %*% sigma %*% t(v)
           [,1]         [,2]
[1,] -0.5036082 -1.218417405
[2,] -0.7905285  1.331412278
[3,]  0.8311744 -0.147847237
[4,] -0.8628976  0.681707538
[5,] -1.1254487 -0.007460698
> b
           [,1]         [,2]
[1,] -0.5036082 -1.218417405
[2,] -0.7905285  1.331412278
[3,]  0.8311744 -0.147847237
[4,] -0.8628976  0.681707538
[5,] -1.1254487 -0.007460698