Force a Matrix to 'symmetricMatrix' Without Symmetry Checks
Force a Matrix to 'symmetricMatrix' Without Symmetry Checks
Force a square matrix x to a symmetricMatrix, without a symmetry check as it would be applied for as(x, "symmetricMatrix").
methods
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.
Returns
a square matrix inheriting from class symmetricMatrix.
See Also
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)