It is relatively easy to extend caracas
by calling
SymPy
functions directly.
This can be achived using sympy_func(x, fun, ...)
that
calls a member function on the object provided,
i.e. x$fun(...)
, or if that fails it calls a function from
the global namespace fun(x, ...)
.
As an example consider inverting a regular matrix A: Let B be the inverse of A. Then, using cofactors, Bij = Cji/det(A). The cofactor Cij is given as Cij = (−1)i + jMij where Mij is the determinant of the submatrix of A obtained by deleting the ith row and the jth column of A.
A quick search https://docs.sympy.org/latest/modules/matrices/matrices.html
shows that there are two relevant functions in SymPy
:
cofactor
and cofactor_matrix
.
If these functions are not available in caracas
they can
be made so using sympy_func
:
cofactor_matrix <- function(x) {
sympy_func(x, "cofactor_matrix")
}
cofactor <- function(x, i, j) {
# Python indexing starts at 0 - thus subtract 1 to convert from R indexing
# to Python indexing
sympy_func(x, "cofactor", i - 1, j - 1)
}
We get the right answer