matpower <- function(x, n, nf=min(dim(x)), tol=1e-7) {
if (inherits(x, "matrix")) {
s <- svd(x, nu = nf, nv = nf)
m <- sum(s$d > tol)
nf <- min(nf, m)
x <- s$u[, 1:nf] %*% diag(s$d[1:nf]^n) %*% t(s$v[, 1:nf])
} else
stop("x need to be a matrix object!")
return(x)
}