| isSymmetric {base} | R Documentation |
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, and
(since R >= 4.5.0),
isSymmetric(Z, trans = "T") checks for “simple” symmetry.
Usage
isSymmetric(object, ...)
## S3 method for class 'matrix'
isSymmetric(object, tol = 100 * .Machine$double.eps,
tol1 = 8 * tol, trans = "C", ...)
Arguments
object |
any R object; a |
tol |
numeric scalar >= 0. Smaller differences are not
considered, see |
tol1 |
numeric scalar >= 0. |
trans |
a single |
... |
further arguments passed to methods; the matrix method
passes these to |
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.
See Also
eigen which calls isSymmetric when its
symmetric argument is missing.
Examples
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
ZtZ <- t(z) %*% z
Z ; ZtZ
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)