The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.
library(calculus)
The function derivative
performs high-order symbolic and numerical differentiation for generic
tensors with respect to an arbitrary number of variables. The function
behaves differently depending on the arguments order
, the
order of differentiation, and var
, the variable names with
respect to which the derivatives are computed.
When multiple variables are provided and order
is a
single integer \(n\), then the \(n\)-th order derivative is computed for
each element of the tensor with respect to each variable:
\[D = \partial^{(n)} \otimes F\]
that is:
\[D_{i,\dots,j,k} = \partial^{(n)}_{k} F_{i,\dots,j}\]
where \(F\) is the tensor of functions and \(\partial_k^{(n)}\) denotes the \(n\)-th order partial derivative with respect to the \(k\)-th variable.
When order
matches the length of var
, it is
assumed that the differentiation order is provided for each variable. In
this case, each element is derived \(n_k\) times with respect to the \(k\)-th variable, for each of the \(m\) variables.
\[D_{i,\dots,j} = \partial^{(n_1)}_1\cdots\partial^{(n_m)}_m F_{i,\dots,j}\]
The same applies when order
is a named vector giving the
differentiation order for each variable. For example,
order = c(x=1, y=2)
differentiates once with respect to
\(x\) and twice with respect to \(y\). A call with
order = c(x=1, y=0)
is equivalent to
order = c(x=1)
.
To compute numerical derivatives or to evaluate symbolic derivatives
at a point, the function accepts a named vector for the argument
var
; e.g. var = c(x=1, y=2)
evaluates the
derivatives in \(x=1\) and \(y=2\). For functions
where the
first argument is used as a parameter vector, var
should be
a numeric
vector indicating the point at which the
derivatives are to be calculated.
Symbolic derivatives of univariate functions: \(\partial_x sin(x)\).
derivative(f = "sin(x)", var = "x")
#> [1] "cos(x)"
Evaluation of symbolic and numerical derivatives: \(\partial_x sin(x)|_{x=0}\).
<- derivative(f = "sin(x)", var = c(x = 0))
sym <- derivative(f = function(x) sin(x), var = c(x = 0)) num
#> Symbolic Numeric
#> 1 1
High order symbolic and numerical derivatives: \(\partial^{(4)}_x sin(x)|_{x=0}\).
<- derivative(f = "sin(x)", var = c(x = 0), order = 4)
sym <- derivative(f = function(x) sin(x), var = c(x = 0), order = 4) num
#> Symbolic Numeric
#> 0.000000e+00 -9.767766e-12
Symbolic derivatives of multivariate functions: \(\partial_x^{(1)}\partial_y^{(2)} y^2sin(x)\).
derivative(f = "y^2*sin(x)", var = c("x", "y"), order = c(1, 2))
#> [1] "2 * cos(x)"
Numerical derivatives of multivariate functions: \(\partial_x^{(1)}\partial_y^{(2)} y^2sin(x)|_{x=0,y=0}\) with degree of accuracy \(O(h^6)\).
<- function(x, y) y^2*sin(x)
f derivative(f, var = c(x=0, y=0), order = c(1, 2), accuracy = 6)
#> [1] 2
Symbolic gradient of multivariate functions: \(\partial_{x,y}x^2y^2\).
derivative("x^2*y^2", var = c("x", "y"))
#> [,1] [,2]
#> [1,] "2 * x * y^2" "x^2 * (2 * y)"
High order derivatives of multivariate functions: \(\partial^{(6)}_{x,y}x^6y^6\).
derivative("x^6*y^6", var = c("x", "y"), order = 6)
#> [,1] [,2]
#> [1,] "6 * (5 * (4 * (3 * 2))) * y^6" "x^6 * (6 * (5 * (4 * (3 * 2))))"
Numerical gradient of multivariate functions: \(\partial_{x,y}x^2y^2|_{x = 1, y = 2}\).
<- function(x, y) x^2*y^2
f derivative(f, var = c(x=1, y=2))
#> [,1] [,2]
#> [1,] 8 4
Numerical Jacobian of vector valued functions: \(\partial_{x,y}[xy,x^2y^2]|_{x = 1, y = 2}\).
<- function(x, y) c(x*y, x^2*y^2)
f derivative(f, var = c(x=1, y=2))
#> [,1] [,2]
#> [1,] 2 1
#> [2,] 8 4
Numerical Jacobian of vector valued where the first argument is used as a parameter vector: \(\partial_{X}[\sum_ix_i, \prod_ix_i]|_{X = 0}\).
<- function(x) c(sum(x), prod(x))
f derivative(f, var = c(0, 0, 0))
#> [,1] [,2] [,3]
#> [1,] 1 1 1
#> [2,] 0 0 0
Guidotti E (2022). “calculus: High-Dimensional Numerical and Symbolic Calculus in R.” Journal of Statistical Software, 104(5), 1-37. doi:10.18637/jss.v104.i05
A BibTeX entry for LaTeX users is
@Article{calculus,
title = {{calculus}: High-Dimensional Numerical and Symbolic Calculus in {R}},
author = {Emanuele Guidotti},
journal = {Journal of Statistical Software},
year = {2022},
volume = {104},
number = {5},
pages = {1--37},
doi = {10.18637/jss.v104.i05},
}
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.