#' Check if a matrix is symmetric and positive definite
#' @param ... One or more numeric matrices
#' @param tol Numerical tolerance for checking symmetry and positive definiteness
#' @details Function checks whether the matrix \code{x} is symmetric and positive
#' definite. Symmetry is evaluated up to an entrywise tolerance of \code{tol}, so
#' that differences smaller than \code{tol} are ignored. Positive-definiteness is
#' checked by computing the eigenvalues of \code{x} using \code{eigen}, setting
#' eigenvalues smaller than \code{tol} in absolute value to zero, and then checking
#' whether any are less than or equal to zero.
#'
#' @return A Boolean value indicating whether the matrix is symmetric and positive
#' definite
is.spd <- function(..., tol = 1e-8){
data <- list(...)
check <- sapply(data, function(i) {
# Test if matrix
if (!is.matrix(i)){
return(FALSE)
}
# Test if symmetric
if (!isSymmetric(i, tol = tol)){
return(FALSE)
}
# Test if positive definite
eig <- eigen(i, symmetric = T, only.values = T)$values
eig[abs(eig) <= tol] <- 0
if (any(eig <= 0)){
return(FALSE)
}
return(TRUE)
})
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.