Description Usage Arguments Details Value Author(s) See Also Examples
Provides block diagonal version of the base package functions
chol
, chol2inv
, and
backsolve
.
Computes the Cholesky factor, the matrix inverse and solves matrix equation
systems for block diagonal matrices.
1 2 3 4 5 6 7 8  makeCholBlock(mat, n.blocks = 1, block.sizes = rep(dim(mat)[1]/n.blocks,
n.blocks))
invCholBlock(R, n.blocks = 1, block.sizes = rep(dim(R)[1]/n.blocks,
n.blocks))
solveTriBlock(R, B, n.blocks = 1, block.sizes = rep(dim(R)[1]/n.blocks,
n.blocks), transpose = FALSE)

mat 
A block diagonal, square, positive definite matrix. 
n.blocks 
Number of diagonal blocks in 
block.sizes 
A vector of length 
R 
Upper right block diagonal Cholesky factor. The output from

B 
Vector or matrix containg the right hand side of the equations
system to be solved; needs to be a multiple of 
transpose 
Transpose 
makeCholBlock
computes the Cholesky factor of a block diagonal matrix
using the block diagonal structure to speed up computations.
invCholBlock
uses the Cholesky factor from makeCholBlock
to
compute the inverse of mat
.
solveTriBlock
solves equation systems based on the Cholesky factor,
using the block diagonal structure to speed up computations (c.f.
backsolve
). The function solves equations of the form R*x = B,
and R'*x = B with respect to x, where the transpose is controlled by the
parameter transpose
. Aplying the function twice solves mat*x=B, see
the examples.
For all three functions the block diagonal structure of the matrix is
defined by two input variables, the number of blocks n.blocks
, and
the size of each block block.sizes
. The size of the matrices must
match the total number of blocks, i.e. sum(block.sizes)
must
equal dim(mat)
.
The functions can be used for full matrices by setting the number of blocks to 1.
makeCholBlock
gives the Cholesky factor and
invCholBlock
gives the inverse of the matrix mat
.
solveTriBlock
gives to answer to the equation system.
Johan Lindstrom and Adam Szpiro
Other basic linear algebra: blockMult
,
crossDist
, norm2
,
sumLogDiag
Other block matrix functions: blockMult
,
calc.FXtF2
, calc.FX
,
calc.mu.B
, calc.tFXF
,
calc.tFX
, makeSigmaB
,
makeSigmaNu
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27  ##create a matrix
mat < cbind(c(1,0,0),c(0,2,1),c(0,1,2))
##define the number of blocks and block sizes
block.sizes < c(1,2)
n.blocks < length(block.sizes)
##Compute the Cholesky factor
R < makeCholBlock(mat, n.blocks, block.sizes)
##and the matrix inverse
i.mat < invCholBlock(R, n.blocks, block.sizes)
##compare to the alternative
i.matsolve(mat)
##define a B vector
B < c(1,2,3)
##solve the equation system (we need n.x since B is not a matrix)
x1 < solveTriBlock(R, B, n.blocks, block.sizes, tr=TRUE)
x2 < solveTriBlock(R, x1, n.blocks, block.sizes, tr=FALSE)
print(x2)
##compare to the alternative
print(solve(mat,B))
range(x2solve(mat,B))
##compute the quadratic form B'*i.mat*B
norm2(x1)
##compare to the alternative
t(B) %*% i.mat %*% B

Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.