R: Choleski decomposition of a band diagonal matrix

bandchol {mgcv} | R Documentation

## Choleski decomposition of a band diagonal matrix

### Description

Computes Choleski decomposition of a (symmetric positive definite) band-diagonal matrix, `A`.

### Usage

    bandchol(B)

### Arguments

`B` | 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).

### Details

Calls `dpbtrf` from `LAPACK`. The point of this is that it has O(k^2n) computational cost, rather than the O(n^3) required by dense matrix methods.

### Value

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.

### Author(s)

Simon N. Wood simon.wood@r-project.org

### References

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.

### Examples

    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)

[Package mgcv version 1.8-17 Index]