# isSymmetric

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

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

##### See Also

`eigen`

which calls `isSymmetric`

when its
`symmetric`

argument is missing.

##### Examples

`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)
# }
```

*Documentation reproduced from package base, version 3.6.2, License: Part of R 3.6.2*