# bandchol: Choleski decomposition of a band diagonal matrix In mgcv: Mixed GAM Computation Vehicle with Automatic Smoothness Estimation

 bandchol 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)

```

mgcv documentation built on March 29, 2022, 5:06 p.m.