bandSparse              package:Matrix              R Documentation

_C_o_n_s_t_r_u_c_t _S_p_a_r_s_e _B_a_n_d_e_d _M_a_t_r_i_x _f_r_o_m (_S_u_p-/_S_u_p_e_r-) _D_i_a_g_o_n_a_l_s

_D_e_s_c_r_i_p_t_i_o_n:

     Construct a sparse banded matrix by specifying its non-zero sup-
     and super-diagonals.

_U_s_a_g_e:

     bandSparse(n, m = n, k, diagonals, symmetric = FALSE)

_A_r_g_u_m_e_n_t_s:

     n,m: the matrix dimension (n,m) = (nrow, ncol).

       k: integer vector of diagonal numbers, with identical meaning
          as in 'band(*, k)'.

diagonals: optional list of sub-/super- diagonals; if missing, the
          result will be a patter*n* matrix, i.e., inheriting from
          class 'nMatrix'.

          'diagonals' can also be n' x d matrix, where 'd <- length(k)'
          and n' >= min(n,m).  In that case, the sub-/super- diagonals
          are taken from the columns of 'diagonals', where only the
          first several rows will be used (typically) for
          off-diagonals. 

symmetric: logical; if true the result will be symmetric (inheriting
          from class 'symmetricMatrix') and only the upper or lower
          triangle must be specified (via 'k' and 'diagonals').

_V_a_l_u_e:

     a sparse matrix (of 'class' 'CsparseMatrix') of dimension n x m
     with diagonal bands as specified.

_S_e_e _A_l_s_o:

     'band', for _extraction_ of matrix bands; 'bdiag', 'diag',
     'sparseMatrix', 'Matrix'.

_E_x_a_m_p_l_e_s:

     diags <- list(1:30, 10*(1:20), 100*(1:20))
     s1 <- bandSparse(13, k = -c(0:2, 6), diag = c(diags, diags[2]), symm=TRUE)
     s1
     s2 <- bandSparse(13, k =  c(0:2, 6), diag = c(diags, diags[2]), symm=TRUE)
     stopifnot(identical(s1, t(s2)), is(s1,"dsCMatrix"))

     ## a pattern Matrix of *full* (sub-)diagonals:
     bk <- c(0:4, 7,9)
     (s3 <- bandSparse(30, k = bk, symm = TRUE))

     ## If you want a pattern matrix, but with "sparse"-diagonals,
     ## you currently need to go via logical sparse:
     lLis <- lapply(list(rpois(20, 2), rpois(20,1), rpois(20,3))[c(1:3,2:3,3:2)],
                    as.logical)
     (s4 <- bandSparse(20, k = bk, symm = TRUE, diag = lLis))
     (s4. <- as(drop0(s4), "nsparseMatrix"))

     n <- 1e4
     bk <- c(0:5, 7,11)
     bMat <- matrix(1:8, n, 8, byrow=TRUE)
     bLis <- as.data.frame(bMat)
     B  <- bandSparse(n, k = bk, diag = bLis)
     Bs <- bandSparse(n, k = bk, diag = bLis, symmetric=TRUE)
     B [1:15, 1:30]
     Bs[1:15, 1:30]
     ## can use a list *or* a matrix for specifying the diagonals:
     stopifnot(identical(B,  bandSparse(n, k = bk, diag = bMat)),
               identical(Bs, bandSparse(n, k = bk, diag = bMat, symmetric=TRUE)))

