Learn R Programming

base (version 3.3)

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

Description

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.

Usage

isSymmetric(object, ...) "isSymmetric"(object, tol = 100 * .Machine$double.eps, ...)

Arguments

object
any R object; a matrix for the matrix method.
tol
numeric scalar >= 0. Smaller differences are not considered, see all.equal.numeric.
...
further arguments passed to methods; the matrix method passes these to all.equal.

Value

logical indicating if object is symmetric or not.

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).

See Also

eigen which calls isSymmetric when its symmetric argument is missing.

Examples

Run this code
isSymmetric(D3 <- diag(3)) # -> TRUE

D3[2, 1] <- 1e-100
D3
isSymmetric(D3) # TRUE
isSymmetric(D3, tol = 0) # FALSE for zero-tolerance

## Complex Matrizes - 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

Run the code above in your browser using DataLab