forceSymmetric {Matrix} 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)


[Package Matrix version 1.4-1 Index]