Learn R Programming

Matrix (version 1.0-9)

diagU2N: Transform Triangular Matrices from Unit Triangular to General and back

Description

Transform a triangular matrix x, i.e., of class "triangularMatrix", from (internally!) unit triangular (unitriangular) to general (diagU2N(x)) or back (diagN2U(x)). Note that the latter, diagN2U(x), also sets the diagonal to one in cases where diag(x) was not all one.

.diagU2N(x) assumes but does not check that x is a triangularMatrix with diag slot "U", and should hence be used with care.

Usage

diagN2U(x, cl = getClassDef(class(x)), checkDense = FALSE)
 diagU2N(x, cl = getClassDef(class(x)), checkDense = FALSE)
.diagU2N(x, cl, checkDense = FALSE)

Arguments

x
a triangularMatrix, often sparse.
cl
(optional, for speedup only:) class (definition) of x.
checkDense
logical indicating if dense (see denseMatrix) matrices should be considered at all; i.e., when false, as per default, the result will be sparse even when x is dense.

Value

  • a triangular matrix of the same class and (semantically) with identical entries as x, but with a different diag slot.

Details

The concept of unit triangular matrices with a diag slot of "U" stems from LAPACK.

See Also

"triangularMatrix", "dtCMatrix".

Examples

Run this code
(T <- Diagonal(7) + triu(Matrix(rpois(49, 1/4), 7,7), k = 1))
(uT <- diagN2U(T)) # "unitriangular"
(t.u <- diagN2U(10*T))# changes the diagonal!
stopifnot(all(T == uT), diag(t.u) == 1,
          identical(T, diagU2N(uT)))
T[upper.tri(T)] <- 5
T <- diagN2U(as(T,"triangularMatrix"))
stopifnot(T@diag == "U")
dT <- as(T, "denseMatrix")
dt. <- diagN2U(dT)
dtU <- diagN2U(dT, checkDense=TRUE)
stopifnot(is(dtU, "denseMatrix"), is(dt., "sparseMatrix"),
          all(dT == dt.), all(dT == dtU),
          dt.@diag == "U", dtU@diag == "U")

Run the code above in your browser using DataLab