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.

Hermite polynomials

library(calculus)

Hermite polynomials are obtained by differentiation of the Gaussian kernel:

\[H_{\nu}(x,\Sigma) = exp \Bigl( \frac{1}{2} x_i \Sigma_{ij} x_j \Bigl) (- \partial_x )^\nu exp \Bigl( -\frac{1}{2} x_i \Sigma_{ij} x_j \Bigl)\]

where \(\Sigma\) is a \(d\)-dimensional square matrix and \(\nu=(\nu_1 \dots \nu_d)\) is the vector representing the order of differentiation for each variable \(x = (x_1\dots x_d)\). In the case where \(\Sigma=1\) and \(x=x_1\) the formula reduces to the standard univariate Hermite polynomials:

\[ H_{\nu}(x) = e^{\frac{x^2}{2}}(-1)^\nu \frac{d^\nu}{dx^\nu}e^{-\frac{x^2}{2}} \]

The function hermite generates recursively all the Hermite polynomials of degree \(\nu'\) where \(|\nu'| \leq|\nu|\). The output is a list of Hermite polynomials of degree \(\nu'\), where each polynomial is described as a list containing the character representing the polynomial, the order of the polynomial, and a data.frame containing the variables, coefficients and degrees of each term in the polynomial.

In the univariate case, for \(\nu=2\):

hermite(order = 2)
#> $`0`
#> $`0`$f
#> [1] "(1) * 1"
#> 
#> $`0`$order
#> [1] 0
#> 
#> $`0`$terms
#>   var coef degree
#> 0   1    1      0
#> 
#> 
#> $`1`
#> $`1`$f
#> [1] "(1) * x^1"
#> 
#> $`1`$order
#> [1] 1
#> 
#> $`1`$terms
#>   var coef degree
#> 0   1    0      0
#> 1 x^1    1      1
#> 
#> 
#> $`2`
#> $`2`$f
#> [1] "(-1) * 1 + (1) * x^2"
#> 
#> $`2`$order
#> [1] 2
#> 
#> $`2`$terms
#>   var coef degree
#> 0   1   -1      0
#> 1 x^1    0      1
#> 2 x^2    1      2

In the multivariate case, where for simplicity \(\Sigma_{ij}=\delta_{ij}\), \(x=(x_1,x_2)\), and \(|\nu|=2\):

hermite(order = 2, sigma = diag(2), var = c("x1", "x2"))
#> $`0,0`
#> $`0,0`$f
#> [1] "(1) * 1"
#> 
#> $`0,0`$order
#> [1] 0
#> 
#> $`0,0`$terms
#>     var coef degree
#> 0,0   1    1      0
#> 
#> 
#> $`0,1`
#> $`0,1`$f
#> [1] "(1) * x2^1"
#> 
#> $`0,1`$order
#> [1] 1
#> 
#> $`0,1`$terms
#>      var coef degree
#> 0,0    1    0      0
#> 0,1 x2^1    1      1
#> 1,0 x1^1    0      1
#> 
#> 
#> $`1,0`
#> $`1,0`$f
#> [1] "(1) * x1^1"
#> 
#> $`1,0`$order
#> [1] 1
#> 
#> $`1,0`$terms
#>      var coef degree
#> 0,0    1    0      0
#> 0,1 x2^1    0      1
#> 1,0 x1^1    1      1
#> 
#> 
#> $`0,2`
#> $`0,2`$f
#> [1] "(-1) * 1 + (1) * x2^2"
#> 
#> $`0,2`$order
#> [1] 2
#> 
#> $`0,2`$terms
#>           var coef degree
#> 0,0         1   -1      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2    1      2
#> 2,0      x1^2    0      2
#> 1,1 x1^1*x2^1    0      2
#> 
#> 
#> $`2,0`
#> $`2,0`$f
#> [1] "(-1) * 1 + (1) * x1^2"
#> 
#> $`2,0`$order
#> [1] 2
#> 
#> $`2,0`$terms
#>           var coef degree
#> 0,0         1   -1      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2    0      2
#> 2,0      x1^2    1      2
#> 1,1 x1^1*x2^1    0      2
#> 
#> 
#> $`1,1`
#> $`1,1`$f
#> [1] "(1) * x1^1*x2^1"
#> 
#> $`1,1`$order
#> [1] 2
#> 
#> $`1,1`$terms
#>           var coef degree
#> 0,0         1    0      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2    0      2
#> 2,0      x1^2    0      2
#> 1,1 x1^1*x2^1    1      2

If transform is not NULL, the variables var \(x\) are replaced with transform \(f(x)\) to compute the polynomials \(H_{ν}(f(x),\Sigma)\). For example:

\[ f(x_1,x_2)= \begin{bmatrix} x_1+x_2,x_1-x_2 \end{bmatrix} \]

hermite(order = 2, sigma = diag(2), var = c("x1", "x2"), transform = c('x1+x2','x1-x2'))
#> $`0,0`
#> $`0,0`$f
#> [1] "(1) * 1"
#> 
#> $`0,0`$order
#> [1] 0
#> 
#> $`0,0`$terms
#>     var coef degree
#> 0,0   1    1      0
#> 
#> 
#> $`0,1`
#> $`0,1`$f
#> [1] "(-1) * x2^1 + (1) * x1^1"
#> 
#> $`0,1`$order
#> [1] 1
#> 
#> $`0,1`$terms
#>      var coef degree
#> 0,0    1    0      0
#> 0,1 x2^1   -1      1
#> 1,0 x1^1    1      1
#> 
#> 
#> $`1,0`
#> $`1,0`$f
#> [1] "(1) * x2^1 + (1) * x1^1"
#> 
#> $`1,0`$order
#> [1] 1
#> 
#> $`1,0`$terms
#>      var coef degree
#> 0,0    1    0      0
#> 0,1 x2^1    1      1
#> 1,0 x1^1    1      1
#> 
#> 
#> $`0,2`
#> $`0,2`$f
#> [1] "(-1) * 1 + (1) * x2^2 + (1) * x1^2 + (-2) * x1^1*x2^1"
#> 
#> $`0,2`$order
#> [1] 2
#> 
#> $`0,2`$terms
#>           var coef degree
#> 0,0         1   -1      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2    1      2
#> 2,0      x1^2    1      2
#> 1,1 x1^1*x2^1   -2      2
#> 
#> 
#> $`2,0`
#> $`2,0`$f
#> [1] "(-1) * 1 + (1) * x2^2 + (1) * x1^2 + (2) * x1^1*x2^1"
#> 
#> $`2,0`$order
#> [1] 2
#> 
#> $`2,0`$terms
#>           var coef degree
#> 0,0         1   -1      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2    1      2
#> 2,0      x1^2    1      2
#> 1,1 x1^1*x2^1    2      2
#> 
#> 
#> $`1,1`
#> $`1,1`$f
#> [1] "(-1) * x2^2 + (1) * x1^2"
#> 
#> $`1,1`$order
#> [1] 2
#> 
#> $`1,1`$terms
#>           var coef degree
#> 0,0         1    0      0
#> 0,1      x2^1    0      1
#> 1,0      x1^1    0      1
#> 0,2      x2^2   -1      2
#> 2,0      x1^2    1      2
#> 1,1 x1^1*x2^1    0      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.