Solve a matrix equation using the generalized Cholesky decompostion

Description

This function solves the equation Ax=b for x, given b and the generalized Cholesky decompostion of A. If only the first argument is given, then a G-inverse of A is returned.

Usage

1
2
## S3 method for class 'gchol'
solve(a, b, full=TRUE, ...)

Arguments

a

a generalized cholesky decompostion of a matrix, as returned by the gchol function.

b

a numeric vector or matrix, that forms the right-hand side of the equation.

full

solve the problem for the full (orignal) matrix, or for the cholesky matrix.

...

other arguments are ignored

Details

A symmetric matrix A can be decomposed as LDL', where L is a lower triangular matrix with 1's on the diagonal, L' is the transpose of L, and D is diagonal. This routine solves either the original problem Ay=b (full argument) or the subproblem sqrt(D)L'y=b. If b is missing it returns the inverse of A or L, respectively.

Value

if argument b is not present, the inverse of a is returned, otherwise the solution to matrix equation.

See Also

gchol

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Create a matrix that is symmetric, but not positive definite
#   The matrix temp has column 6 redundant with cols 1-5
smat <- matrix(1:64, ncol=8)
smat <- smat + t(smat) + diag(rep(20,8))  #smat is 8 by 8 symmetric
temp <-  smat[c(1:5, 5:8), c(1:5, 5:8)]
ch1  <- gchol(temp)

ginv <- solve(ch1, full=FALSE)  # generalized inverse of ch1
tinv <- solve(ch1, full=TRUE)   # generalized inverse of temp
all.equal(temp %*% tinv %*% temp, temp)