# Wolfram Function Repository

Instant-use add-on functions for the Wolfram Language

Function Repository Resource:

Compute the Hermite decomposition of a matrix of univariate polynomials

Contributed by:
Daniel Lichtblau

ResourceFunction["PolynomialHermiteDecomposition"][ computes the Hermite decomposition of the matrix | |

ResourceFunction["PolynomialHermiteDecomposition"][ computes the Hermite decomposition for a matrix of polynomials in the variable |

The result is given in the form {*u*,*h*} where *u* is a unimodular matrix, *h* is an upper‐triangular matrix, and *u*.*mat*⩵*h*.

The Hermite form matrix will have zeros below all pivot elements, and polynomials above a given pivot will have lower degree than that pivot.

A unimodular matrix over a ring of univariate polynomials is a matrix with nonzero determinant lying in the coefficient field (that is, a constant).

The Hermite form is similar to the reduced echelon form, except divisions in the polynomial field are not permitted. Rather than using division to “normalize” pivots to unity, pivot degrees are reduced using the extended polynomial GCD operation on pairs of elements in a given matrix column.

Multivariate polynomials are regarded as univariate in the specified variable, with all others treated as symbolic coefficients.

ResourceFunction["PolynomialHermiteDecomposition"] is intended for matrices of polynomials in a single variable, with all coefficients either exact or approximate numbers.

Compute the Hermite decomposition of a 2×3 matrix of low-degree polynomials:

In[1]:= |

Out[2]= |

Check the matrix equation:

In[3]:= |

Out[3]= |

Check that *u* is unimodular:

In[4]:= |

Out[4]= |

Generate and compute the Hermite decomposition for an 8×12 matrix of random degree-5 polynomials with coefficients between −10 and 10:

In[5]:= |

Out[6]= |

Computing this by the direct method is comparatively slower:

In[7]:= |

Out[7]= |

The situation is typically reversed when one works over a prime field (this is reflected in the Automatic method selection):

In[8]:= |

Out[8]= |

In[9]:= |

Out[9]= |

Also, the direct method is typically more reliable than the one that uses a Gröbner basis computation:

In[10]:= |

Out[10]= |

The Gröbner basis method needs to have higher precision input for this example:

In[11]:= |

Out[11]= |

In[12]:= |

Out[12]= |

The results agree:

In[13]:= |

Out[13]= |

If a polynomial solution exists, it can be found using the Hermite decomposition:

In[14]:= |

Create an underdetermined system using an 8×12 matrix of random degree-5 polynomials with coefficients between -10 and 10, and an eight-dimensional right-hand-side polynomial of the same specification:

In[15]:= |

Solve this system:

In[16]:= |

Out[16]= |

Check the solution:

In[17]:= |

Out[17]= |

Note that some components have high degree:

In[18]:= |

Out[18]= |

You can get a solution to the system much faster using LinearSolve:

In[19]:= |

Out[19]= |

But several components are rational functions rather than polynomials:

In[20]:= |

Out[20]= |

- 1.0.0 – 08 November 2019

This work is licensed under a Creative Commons Attribution 4.0 International License