# Wolfram Function Repository

Instant-use add-on functions for the Wolfram Language

Function Repository Resource:

Compute the Popov decomposition of a matrix of univariate polynomials

Contributed by:
Daniel Lichtblau

ResourceFunction["PopovDecomposition"][ computes the Popov decomposition of the matrix | |

ResourceFunction["PopovDecomposition"][ gives the Popov decomposition of the matrix |

The result is given in the form {*u*,*pop*} where *u* is a unimodular matrix, *pop* is the Popov normal form for *mat* and *u*.*mat*=*pop*.

The Popov normal form can be characterized as follows. Take the maximal degrees in each column, and permute columns so these are ordered from largest to smallest. Remove any rows of zeros. Now take the matrix of coefficients of maximal degree in each row. This matrix has only nonzero constants on the main diagonal, and zeros everywhere else. Stated differently, after permuting columns to correspond to decreasing maximal degree, the maximal degrees in each row appear on the main diagonal, and these degrees are non-increasing.

The Popov normal form is sometimes referred to as the lattice-reduced form, as it satisfies a minimal degree property analogous to the (approximately) minimal-length behavior of rows of a reduced-integer lattice.

Compute the Popov decomposition for a 3×3 matrix of quartic polynomials:

In[1]:= |

Out[1]= |

Check that the determinant is a constant:

In[2]:= |

Out[2]= |

Check that the necessary matrix identity is satisfied:

In[3]:= |

Out[3]= |

Check that the maximal degrees in each row move successively to the right:

In[4]:= |

Out[4]= |

Create a tool to generate a 3×3 matrix of quartic polynomials:

In[5]:= |

If the input matrix does not have full row rank, there will be zero rows at the bottom of the Popov form (as many as the row rank deficiency):

In[6]:= |

Out[3]= |

Generate a 3×3 matrix of quartic polynomials:

In[7]:= |

Compute the Popov decomposition over the integers modulo a prime:

In[8]:= |

Out[8]= |

Check the necessary matrix identity:

In[9]:= |

Out[9]= |

- 2.0.0 – 05 June 2020
- 1.0.0 – 12 November 2019

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