**legendre_product_polynomial**,
an Octave code which
cdefines a Legendre product polynomial (LPP), creating a multivariate
polynomial as the product of univariate Legendre polynomials.

The Legendre polynomials are a polynomial sequence L(I,X), with polynomial I having degree I.

The first few Legendre polynomials are

0: 1 1: x 2: 3/2 x^2 - 1/2 3: 5/2 x^3 - 3/2 x 4: 35/8 x^4 - 30/8 x^2 + 3/8 5: 63/8 x^5 - 70/8 x^3 + 15/8 x

A Legendre 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 Legendre polynomials, with each the I-th polynomial evaluated at the I-th coordinate:

L((I1,I2,...IM),X) = L(1,X(1)) * L(2,X(2)) * ... * L(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 Legendre product polynomial from its index set, and it is easy to evaluate it directly, the sum of two Legendre product polynomials cannot be reduced to a single Legendre product polynomial. Thus, it may be useful to generate the Legendre 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 ...

The computer code and data files described and made available on this web page are distributed under the MIT license

**legendre_product_polynomial** is available in
a C version and
a C++ version and
a Fortran90 version and
a MATLAB version and
an Octave version and
a Python version.

legendre_product_polynomial_test

combo, an Octave 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.

octave_polynomial, an Octave code which analyzes a variety of polynomial families, returning the polynomial values, coefficients, derivatives, integrals, roots, or other information.

monomial, an Octave 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, an Octave code which evaluates a variety of mathematical functions, including chebyshev, gegenbauer, hermite, jacobi, laguerre, legendre polynomials, and the collatz sequence.

subset, an Octave code which enumerates, generates, ranks and unranks combinatorial objects including combinations, compositions, gray codes, index sets, partitions, permutations, subsets, and young tables.

- comp_enum.m, enumerates the compositions of an integer into K parts.
- comp_next_grlex.m, returns the next composition of an integer into K parts, using grlex order.
- comp_random_grlex.m, returns a random composition of an integer into K parts, with the integer between 0 and N.
- comp_rank_grlex.m, ranks a composition of an integer into K parts, using grlex order.
- comp_unrank_grlex.m, returns the composition of an integer into K parts of a given rank, using grlex order.
- i4_uniform_ab.m, returns a random I4 in a given range.
- i4vec_print.m, prints an I4VEC.
- i4vec_uniform_ab.m, returns a random I4VEC in a given range.
- lp_coefficients.m, returns the coefficients of a Legendre polynomial
- lp_value.m, evaluates a Legendre polynomial at a point.
- lp_values.m, returns a table of sample values of Legendre polynomials.
- lpp_to_polynomial.m, converts a Legendre Product Polynomial to standard polynomial form.
- lpp_value.m, evaluates a Legendre Product Polynomial at a point.
- mono_next_grlex.m, returns the next monomial in D variables, in grlex order.
- mono_print.m, prints a monomial.
- mono_rank_grlex.m, returns the grlex rank of a monomial in the sequence of all monomials in D dimensions of degree N or less.
- mono_unrank_grlex.m, given the grlex rank, returns the corresponding monomial in the sequence of all monomials in M dimensions.
- mono_upto_enum.m, enumerates the monomials of D variables of total degree up to N.
- mono_upto_next_grlex.m, computes, in grlex order, the monomials of D variables of total degree up to N.
- mono_upto_random.m, randomly selects a monomial of D variables of total degree up to N.
- mono_value.m, evaluates a monomial.
- polynomial_compress.m, "compresses" a polynomial by merging coefficients associated with the same monomial.
- polynomial_print.m, prints a polynomial.
- polynomial_sort.m, sorts the terms in a polynomial.
- polynomial_value.m, evaluates a polynomial.