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, ...) ## S3 method for class 'matrix' isSymmetric(object, tol = 100 * .Machine$double.eps, tol1 = 8 * tol, ...)
Arguments
object | any R object; a |
tol | numeric scalar >= 0. Smaller differences are not considered, see |
tol1 | numeric scalar >= 0. |
... | 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 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)
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.