https://github.com/cran/pracma
Revision b5e4bf28fcba9f5eaffbeecfb0bc307452d074ee authored by Hans W. Borchers on 01 November 2014, 00:00:00 UTC, committed by Gabor Csardi on 01 November 2014, 00:00:00 UTC
1 parent d57c14d
Tip revision: b5e4bf28fcba9f5eaffbeecfb0bc307452d074ee authored by Hans W. Borchers on 01 November 2014, 00:00:00 UTC
version 1.7.7
version 1.7.7
Tip revision: b5e4bf2
pinv.R
##
## p i n v . R Pseudoinverse (Moore-Penrose Generalized Inverse)
##
pinv <- function (A, tol = .Machine$double.eps^(2/3)) {
stopifnot(is.numeric(A), length(dim(A)) == 2, is.matrix(A))
s <- svd(A)
# D <- diag(s$d); Dinv <- diag(1/s$d)
# U <- s$u; V <- s$v
# A = U D V'
# X = V Dinv U'
p <- ( s$d > max(tol * s$d[1], 0) )
if (all(p)) {
mp <- s$v %*% (1/s$d * t(s$u))
} else if (any(p)) {
mp <- s$v[, p, drop=FALSE] %*% (1/s$d[p] * t(s$u[, p, drop=FALSE]))
} else {
mp <- matrix(0, nrow=ncol(A), ncol=nrow(A))
}
return(mp)
}
Computing file changes ...