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.

Taylor series of multivariate functions

library(calculus)

The function taylor provides a convenient way to compute the Taylor series of arbitrary unidimensional or multidimensional functions. The mathematical function can be specified both as a character string or as a function. Symbolic or numerical methods are applied accordingly. For univariate functions, the \(n\)-th order Taylor approximation centered in \(x_0\) is given by:

\[ f(x) \simeq \sum_{k=0}^n\frac{f^{(k)}(x_0)}{k!}(x-x_0)^k \]

where \(f^{(k)}(x_0)\) denotes the \(k\)-th order derivative evaluated in \(x_0\). By using multi-index notation, the Taylor series is generalized to multidimensional functions with an arbitrary number of variables:

\[ f(x) \simeq \sum_{|k|=0}^n\frac{f^{(k)}(x_0)}{k!}(x-x_0)^k \]

where now \(x=(x_1,\dots,x_d)\) is the vector of variables, \(k=(k_1,\dots,k_d)\) gives the order of differentiation with respect to each variable \(f^{(k)}=\frac{\partial^{(|k|)}f}{\partial^{(k_1)}_{x_1}\cdots \partial^{(k_d)}_{x_d}}\), and:

\[|k| = k_1+\cdots+k_d \quad\quad k!=k_1!\cdots k_d! \quad\quad x^k=x_1^{k_1}\cdots x_d^{k_d}\]

The summation runs for \(0\leq |k|\leq n\) and identifies the set

\[\{(k_1,\cdots,k_d):k_1+\cdots k_d \leq n\}\]

that corresponds to the partitions of the integer \(n\). These partitions can be computed with the function partitions that is included in the package and optimized in C++ for speed and flexibility. For example, the following call generates the partitions needed for the \(2\)-nd order Taylor expansion for a function of \(3\) variables:

partitions(n = 2, length = 3, fill = TRUE, perm = TRUE, equal = FALSE)
#>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,]    0    0    0    1    0    0    2    0    1     1
#> [2,]    0    0    1    0    0    2    0    1    0     1
#> [3,]    0    1    0    0    2    0    0    1    1     0

Based on these partitions, the function taylor computes the corresponding derivatives and builds the Taylor series. The output is a list containing the Taylor series, the order of the expansion, and a data.frame containing the variables, coefficients and degrees of each term in the Taylor series.

taylor("exp(x)", var = "x", order = 2)
#> $f
#> [1] "(1) * 1 + (1) * x^1 + (0.5) * x^2"
#> 
#> $order
#> [1] 2
#> 
#> $terms
#>   var coef degree
#> 0   1  1.0      0
#> 1 x^1  1.0      1
#> 2 x^2  0.5      2

By default, the series is centered in \(x_0=0\) but the function also supports \(x_0\neq 0\), the multivariable case, and the approximation of user defined R functions.

f <- function(x, y) log(y)*sin(x)
taylor(f, var = c(x = 0, y = 1), order = 2)
#> $f
#> [1] "(0.999999999969436) * x^1*(y-1)^1"
#> 
#> $order
#> [1] 2
#> 
#> $terms
#>             var coef degree
#> 0,0           1    0      0
#> 0,1     (y-1)^1    0      1
#> 1,0         x^1    0      1
#> 0,2     (y-1)^2    0      2
#> 2,0         x^2    0      2
#> 1,1 x^1*(y-1)^1    1      2

Cite as

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.