swh:1:snp:a4c99a50dc49f82b591f268001b320f8c3ca0041
Raw File
Tip revision: e3fb24ebd97f7686caee78bcef4e558b908a465e authored by jmc on 01 December 2007, 00:00:00 UTC
version 0.97-1
Tip revision: e3fb24e
triDiagonal.R
## extra triDiag functions

triDiag2S <- function(diagonal, upper, lower, r = length(diagonal)) {
    value <- diag(diagonal, r)
    if(r > 1) {
        rseq <- 1:(r-1)
        index <- cbind(rseq+1, rseq)
        value[index] <- lower
        index <- cbind(rseq, rseq+1)
        value[index] <- upper
    }
    value
}

triDiag3S <- function(diagonal, upper, lower,
                      r = length(diagonal)) {
    value <- matrix(0, r, r)
    if(r > 0) {
        r1 <- r-1
        index <- outer((0:r1)*(r+1), 0:2, "+")
        value[index[,2]] <- diagonal
        value[index[-1, 1]] <- upper
        value[index[-r, 3]] <- lower
    }
    value
}
back to top