Description Usage Arguments Value Examples
Solve linear system when the matrix is block-wise with a band diagonal block
1 | block_bandsolve(mat, vect, mat_as_rotated = FALSE, lim = NULL)
|
mat |
Square matrix |
vect |
Vector of same length as |
lim |
Positive integer |
The vector mat ^ -1 vect is returned.
If mat[lim:end, lim:end] is not a band matrix or if mat is
symmetric, an error is returned.
If these two conditions are met, the returned value is the same as
solve(mat, vect). There might be nummerical impercision errors.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ## Not run:
## With mat_as_rotated = FALSE
set.seed(0)
A <- matrix(rnorm(36), 6, 6)
B <- matrix(rnorm(24), 6, 4)
D <- diag(rnorm(4)) + rbind(cbind(0, diag(rnorm(3))), 0)
mat <- rbind(cbind(A + t(A), B),
cbind(t(B), D + t(D)))
vect <- rnorm(10)
lim <- 6
max(block_bandsolve(mat, vect, lim) - solve(mat, vect))
## With mat_as_rotated = TRUE
set.seed(0)
A <- matrix(rnorm(36), 6, 6)
B <- matrix(rnorm(24), 6, 4)
D <- cbind(rnorm(4), c(rnorm(3), 0))
mat_rotated <- list('A' = A + t(A),
'B' = B,
'D' = D)
mat <- rbind(cbind(mat_rotated$A, mat_rotated$B),
cbind(t(mat_rotated$B), rot2mat(mat_rotated$D)))
vect <- rnorm(10)
max(block_bandsolve(mat_rotated, vect, mat_as_rotated = TRUE) - solve(mat, vect))
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.