# forceSymmetric: Force a Matrix to 'symmetricMatrix' Without Symmetry Checks In Matrix: Sparse and Dense Matrix Classes and Methods

 forceSymmetric-methods R Documentation

## Force a Matrix to 'symmetricMatrix' Without Symmetry Checks

### Description

Force a square matrix `x` to a `symmetricMatrix`, without a symmetry check as it would be applied for ```as(x, "symmetricMatrix")```.

### Usage

``````forceSymmetric(x, uplo)
``````

### Arguments

 `x` any square matrix (of numbers), either “"traditional"” (`matrix`) or inheriting from `Matrix`. `uplo` optional string, `"U"` or `"L"` indicating which “triangle” half of `x` should determine the result. The default is `"U"` unless `x` already has a `uplo` slot (i.e., when it is `symmetricMatrix`, or `triangularMatrix`), where the default will be `x@uplo`.

### Value

a square matrix inheriting from class `symmetricMatrix`.

`symmpart` for the symmetric part of a matrix, or the coercions `as(x, <symmetricMatrix class>)`.

### Examples

`````` ## Hilbert matrix
i <- 1:6
h6 <- 1/outer(i - 1L, i, "+")
sd <- sqrt(diag(h6))
hh <- t(h6/sd)/sd # theoretically symmetric
isSymmetric(hh, tol=0) # FALSE; hence
try( as(hh, "symmetricMatrix") ) # fails, but this works fine:
H6 <- forceSymmetric(hh)

## result can be pretty surprising:
(M <- Matrix(1:36, 6))
forceSymmetric(M) # symmetric, hence very different in lower triangle
(tm <- tril(M))
forceSymmetric(tm)
``````

Matrix documentation built on Nov. 14, 2023, 5:06 p.m.