inst/doc/a11-linear-algebra.R

## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ---- message=FALSE, echo=FALSE-----------------------------------------------
library(caracas)
##packageVersion("caracas")

## ---- include = FALSE---------------------------------------------------------
inline_code <- function(x) {
  x
}

if (!has_sympy()) {
  # SymPy not available, so the chunks shall not be evaluated
  knitr::opts_chunk$set(eval = FALSE)
  
  inline_code <- function(x) {
    deparse(substitute(x))
  }
}

## -----------------------------------------------------------------------------
A <- matrix(c("a", "b", "0", "1"), 2, 2) %>% as_sym()
A
A <- matrix_(c("a", "b", "0", "1"), 2, 2) # note the '_' postfix
A
A <- as_sym("[[a, 0], [b, 1]]")
A

A2 <- matrix_(c("a", "b", "c", "1"), 2, 2)
A2

B <- matrix_(c("a", "b", "0", 
              "c", "c", "a"), 2, 3)
B

b <- matrix_(c("b1", "b2"), nrow = 2)

D <- diag_(c("a", "b")) # note the '_' postfix
D

## -----------------------------------------------------------------------------
A + A2
A %*% B

## -----------------------------------------------------------------------------
A * A2

## -----------------------------------------------------------------------------
x <- as_sym(paste0("x", 1:3))
x
x + x
1 / x
x / x

## -----------------------------------------------------------------------------
reciprocal_matrix(A2)
reciprocal_matrix(A2, num = "2*a")

## -----------------------------------------------------------------------------
inv(A)
x <- solve_lin(A, b)
x
A %*% x ## Sanity check

## -----------------------------------------------------------------------------
M <- as_sym("[[1, 2, 3], [4, 5, 6]]")
pinv(M)
B <- as_sym("[[7], [8]]") 
B
z <- do_la(M, "pinv_solve", B)
print(z, rowvec = FALSE) # Do not print column vectors as transposed row vectors

## -----------------------------------------------------------------------------
A <- matrix(c("a", "0", "0", "1"), 2, 2) %>% as_sym()
A
qr_res <- QRdecomposition(A)
qr_res$Q
qr_res$R

## -----------------------------------------------------------------------------
eigenval(A)

## -----------------------------------------------------------------------------
evec <- eigenvec(A)
evec
evec1 <- evec[[1]]$eigvec
evec1
simplify(evec1)

lapply(evec, function(l) simplify(l$eigvec))

## -----------------------------------------------------------------------------
inv(A)
pinv(cbind(A, A)) # pseudo inverse

## -----------------------------------------------------------------------------
args(do_la)

## -----------------------------------------------------------------------------
do_la(A, "QRdecomposition") # == QRdecomposition(A)
do_la(A, "inv")             # == inv(A)
do_la(A, "eigenvec")        # == eigenvec(A)
do_la(A, "eigenvals")       # == eigenval(A)

## -----------------------------------------------------------------------------
cp <- do_la(A, "charpoly")
cp
as_expr(cp)

## -----------------------------------------------------------------------------
do_la(A, "rank")

## -----------------------------------------------------------------------------
A <- matrix(c("a", "b", "0", "1"), 2, 2) %>% as_sym()
A
do_la(A, "cofactor", 0, 1)
do_la(A, "cofactor_matrix")

## -----------------------------------------------------------------------------
do_la(cbind(A, A), "echelon_form")

## -----------------------------------------------------------------------------
B <- as_sym("[[9, 3*I], [-3*I, 5]]")
B
do_la(B, "cholesky")

## -----------------------------------------------------------------------------
B <- t(as_sym("[[ 2, 3, 5 ], [3, 6, 2], [8, 3, 6]]"))
do_la(B, "GramSchmidt")

## -----------------------------------------------------------------------------
B <- t(as_sym("[[ 2, 3, 5 ], [4, 6, 10], [8, 3, 6] ]"))
B
B_rref <- do_la(B, "rref")
B_rref

## -----------------------------------------------------------------------------
B <- matrix(c(1, 3, 0, -2, -6, 0, 3, 9, 6), nrow = 3) %>% as_sym()
B
columnspace(B)
rowspace(B)
x <- nullspace(B)
x
rref(B)
B %*% x

## -----------------------------------------------------------------------------
B <- t(as_sym("[[ 2, 3, 5 ], [4, 6, 10], [8, 3, 6], [8, 3, 6] ]"))
B
singular_values(B)

Try the caracas package in your browser

Any scripts or data that you put into this service are public.

caracas documentation built on June 22, 2024, 10:59 a.m.