Computes Choleski decomposition of a (symmetric positive definite) band-diagonal matrix, A
.
bandchol(B)
Let R
be the factor such that t(R)%*%R = A
. R
is upper triangular and if the rows of B
contained the diagonals of A
on entry, then what is returned is an n by k matrix containing the diagonals of R
, packed as B
was packed on entry. If B
was square on entry, then R
is returned directly. See examples.
An n by k matrix containing the diagonals of the matrix A
to be decomposed. First row is leading diagonal, next is first sub-diagonal, etc. sub-diagonals are zero padded at the end. Alternatively gives A
directly, i.e. a square matrix with 2k-1 non zero diagonals (those from the lower triangle are not accessed).
Simon N. Wood simon.wood@r-project.org
Calls dpbtrf
from LAPACK
. The point of this is that it has
Anderson, E., Bai, Z., Bischof, C., Blackford, S., Dongarra, J., Du Croz, J., Greenbaum, A., Hammarling, S., McKenney, A. and Sorensen, D., 1999. LAPACK Users' guide (Vol. 9). Siam.
require(mgcv)
## simulate a banded diagonal matrix
n <- 7;set.seed(8)
A <- matrix(0,n,n)
sdiag(A) <- runif(n);sdiag(A,1) <- runif(n-1)
sdiag(A,2) <- runif(n-2)
A <- crossprod(A)
## full matrix form...
bandchol(A)
chol(A) ## for comparison
## compact storage form...
B <- matrix(0,3,n)
B[1,] <- sdiag(A);B[2,1:(n-1)] <- sdiag(A,1)
B[3,1:(n-2)] <- sdiag(A,2)
bandchol(B)
Run the code above in your browser using DataLab