Function to test if a matrix is symmetric positive (semi)definite or not.

isSymmetricPD(M)

isSymmetricPSD(M, tol = 1e-04)

Arguments

M

A square symmetric matrix.

tol

A numeric giving the tolerance for determining positive semi-definiteness.

Value

Returns a logical value. Returns TRUE if the M is symmetric positive (semi)definite and FALSE if not. If M is not even symmetric, the function throws an error.

Details

Tests positive definiteness by Cholesky decomposition. Tests positive semi-definiteness by checking if all eigenvalues are larger than \(-\epsilon|\lambda_1|\) where \(\epsilon\) is the tolerance and \(\lambda_1\) is the largest eigenvalue.

While isSymmetricPSD returns TRUE if the matrix is symmetric positive definite and FASLE if not. In practice, it tests if all eigenvalues are larger than -tol*|l| where l is the largest eigenvalue. More here.

See also

Author

Anders Ellern Bilgrau Carel F.W. Peeters <carel.peeters@wur.nl>, Wessel N. van Wieringen

Examples

A <- matrix(rnorm(25), 5, 5)
if (FALSE) {
isSymmetricPD(A)
}
B <- symm(A)
isSymmetricPD(B)
#> [1] FALSE

C <- crossprod(B)
isSymmetricPD(C)
#> [1] TRUE

isSymmetricPSD(C)
#> [1] TRUE