x
(inheriting from Matrix
class) to
symmetricMatrix
, without a symmetry check
(which is applied for all as(x, "symmetricMatrix")
alikes).forceSymmetric(x, uplo)
"U"
or "L"
.
The default is "U"
unless x
already has a uplo
slot (i.e., when it is symmetricMatrix
,
or
symmetricMatrix
.symmpart
for the symmetric part, or the coercions
as(x, )
.## 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)
Run the code above in your browser using DataLab