# isSymmetric

0th

Percentile

##### Test if a Matrix or other Object is Symmetric (Hermitian)

Generic function to test if object is symmetric or not. Currently only a matrix method is implemented, where a complex matrix Z must be “Hermitian” for isSymmetric(Z) to be true.

Keywords
utilities, array
##### Usage
isSymmetric(object, …)
# S3 method for matrix
isSymmetric(object, tol = 100 * .Machine\$double.eps,
tol1 = 8 * tol, …)
##### Arguments
object

any R object; a matrix for the matrix method.

tol

numeric scalar >= 0. Smaller differences are not considered, see all.equal.numeric.

tol1

numeric scalar >= 0. isSymmetric.matrix() ‘pre-tests’ the first and last few rows for fast detection of ‘obviously’ asymmetric cases with this tolerance. Setting it to length zero will skip the pre-tests.

further arguments passed to methods; the matrix method passes these to all.equal. If the row and column names of object are allowed to differ for the symmetry check do use check.attributes = FALSE!

##### Details

The matrix method is used inside eigen by default to test symmetry of matrices up to rounding error, using all.equal. It might not be appropriate in all situations.

Note that a matrix m is only symmetric if its rownames and colnames are identical. Consider using unname(m).

##### Value

logical indicating if object is symmetric or not.

eigen which calls isSymmetric when its symmetric argument is missing.
library(base) # NOT RUN { isSymmetric(D3 <- diag(3)) # -> TRUE D3[2, 1] <- 1e-100 D3 isSymmetric(D3) # TRUE isSymmetric(D3, tol = 0) # FALSE for zero-tolerance ## Complex Matrices - Hermitian or not Z <- sqrt(matrix(-1:2 + 0i, 2)); Z <- t(Conj(Z)) %*% Z Z isSymmetric(Z) # TRUE isSymmetric(Z + 1) # TRUE isSymmetric(Z + 1i) # FALSE -- a Hermitian matrix has a *real* diagonal colnames(D3) <- c("X", "Y", "Z") isSymmetric(D3) # FALSE (as row and column names differ) isSymmetric(D3, check.attributes=FALSE) # TRUE (as names are not checked) # }