# hermite_product_polynomial

hermite_product_polynomial, a FORTRAN90 code which defines a Hermite product polynomial (HePP), creating a multivariate polynomial as the product of univariate Hermite polynomials.

The Hermite polynomials are a polynomial sequence He(i,x), with polynomial I having degree I.

The first few Hermite polynomials He(i,x) are

```        0: 1
1: x
2: x^2 -  1
3: x^3 -  3 x
4: x^4 -  6 x^2 + 3
5: x^5 - 10 x^3 + 15 x
```

A Hermite product polynomial may be defined in a space of M dimensions by choosing M indices. To evaluate the polynomial at a point X, compute the product of the corresponding Hermite polynomials, with each the I-th polynomial evaluated at the I-th coordinate:

```        He((I1,I2,...IM),X) = He(1,X(1)) * He(2,X(2)) * ... * He(M,X(M)).
```

Families of polynomials which are formed in this way can have useful properties for interpolation, derivable from the properties of the 1D family.

While it is useful to generate a Hermite product polynomial from its index set, and it is easy to evaluate it directly, the sum of two Hermite product polynomials cannot be reduced to a single Hermite product polynomial. Thus, it may be useful to generate the Hermite product polynomial from its indices, but then to convert it to a standard polynomial form.

The representation of arbitrary multivariate polynomials can be complicated. In this library, we have chosen a representation involving the spatial dimension M, and three pieces of data, O, C and E.

• O is the number of terms in the polynomial.
• C() is a real vector of length O, containing the coefficients of each term.
• E() is an integer vector of length O, which defines the index (the exponents of X(1) through X(M)) of each term.

The exponent indexing is done in a natural way, suggested by the following indexing for the case M = 2:

```        1: x^0 y^0
2: x^0 y^1
3: x^1 y^0
4: x^0 y^2
5: x^1 y^1
6; x^2 y^0
7: x^0 y^3
8: x^1 y^2
9: x^2 y^1
10: x^3 y^0
...
```

### Languages:

hermite_product_polynomial is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version.

### Related Data and Programs:

COMBO, a FORTRAN90 code which includes routines for ranking, unranking, enumerating and randomly selecting balanced sequences, cycles, graphs, Gray codes, subsets, partitions, permutations, restricted growth functions, Pruefer codes and trees.

HERMITE_POLYNOMIAL, a FORTRAN90 code which evaluates the Hermite polynomial and associated functions.

LEGENDRE_PRODUCT_POLYNOMIAL, a FORTRAN90 code which defines Legendre product polynomials, creating a multivariate polynomial as the product of univariate Legendre polynomials.

MONOMIAL, a FORTRAN90 code which enumerates, lists, ranks, unranks and randomizes multivariate monomials in a space of M dimensions, with total degree less than N, equal to N, or lying within a given range.

POLPAK, a FORTRAN90 code which evaluates a variety of mathematical functions, including Chebyshev, Gegenbauer, Hermite, Jacobi, Laguerre, Legendre polynomials, and the Collatz sequence.

POLYNOMIAL, a FORTRAN90 code which adds, multiplies, differentiates, evaluates and prints multivariate polynomials in a space of M dimensions.

SUBSET, a FORTRAN90 code which enumerates, generates, ranks and unranks combinatorial objects including combinations, compositions, Gray codes, index sets, partitions, permutations, subsets, and Young tables.

### Source Code:

Last revised on 14 July 2020.