Learn R Programming

Matrix (version 1.7-1)

chol2inv-methods: Inverse from Cholesky Factor

Description

Given formally upper and lower triangular matrices \(U\) and \(L\), compute \((U' U)^{-1}\) and \((L L')^{-1}\), respectively.

This function can be seen as way to compute the inverse of a symmetric positive definite matrix given its Cholesky factor. Equivalently, it can be seen as a way to compute \((X' X)^{-1}\) given the \(R\) part of the QR factorization of \(X\), if \(R\) is constrained to have positive diagonal entries.

Usage

chol2inv(x, ...)
# S4 method for dtrMatrix
chol2inv(x, ...)
# S4 method for dtCMatrix
chol2inv(x, ...)
# S4 method for generalMatrix
chol2inv(x, uplo = "U", ...)

Value

A matrix, symmetricMatrix, or diagonalMatrix representing the inverse of the positive definite matrix whose Cholesky factor is x. The result is a traditional matrix if x is a traditional matrix, dense if x is dense, and sparse if x is sparse.

Arguments

x

a square matrix or Matrix, typically the result of a call to chol. If x is square but not (formally) triangular, then only the upper or lower triangle is considered, depending on optional argument uplo if x is a Matrix.

uplo

a string, either "U" or "L", indicating which triangle of x contains the Cholesky factor. The default is "U", to be consistent with chol2inv from base.

...

further arguments passed to or from methods.

See Also

The default method from base, chol2inv, called for traditional matrices x.

Generic function chol, for computing the upper triangular Cholesky factor \(L'\) of a symmetric positive semidefinite matrix.

Generic function solve, for solving linear systems and (as a corollary) for computing inverses more generally.

Examples

Run this code
(A <- Matrix(cbind(c(1, 1, 1), c(1, 2, 4), c(1, 4, 16))))
(R <- chol(A))
(L <- t(R))
(R2i <- chol2inv(R))
(L2i <- chol2inv(R))
stopifnot(exprs = {
    all.equal(R2i, tcrossprod(solve(R)))
    all.equal(L2i,  crossprod(solve(L)))
    all.equal(as(R2i %*% A, "matrix"), diag(3L)) # the identity 
    all.equal(as(L2i %*% A, "matrix"), diag(3L)) # ditto
})

Run the code above in your browser using DataLab