Hermite form computation for function fields#
This module provides an optimized implementation of the algorithm computing Hermite forms of matrices over polynomials. This is the workhorse of the function field machinery of Sage.
EXAMPLES:
sage: P.<x> = PolynomialRing(QQ)
sage: A = matrix(P,3,[-(x-1)^((i-j+1) % 3) for i in range(3) for j in range(3)])
sage: A
[ -x + 1 -1 -x^2 + 2*x - 1]
[-x^2 + 2*x - 1 -x + 1 -1]
[ -1 -x^2 + 2*x - 1 -x + 1]
sage: from sage.rings.function_field.hermite_form_polynomial import reversed_hermite_form
sage: B = copy(A)
sage: U = reversed_hermite_form(B, transformation=True)
sage: U * A == B
True
sage: B
[x^3 - 3*x^2 + 3*x - 2 0 0]
[ 0 x^3 - 3*x^2 + 3*x - 2 0]
[ x^2 - 2*x + 1 x - 1 1]
>>> from sage.all import *
>>> P = PolynomialRing(QQ, names=('x',)); (x,) = P._first_ngens(1)
>>> A = matrix(P,Integer(3),[-(x-Integer(1))**((i-j+Integer(1)) % Integer(3)) for i in range(Integer(3)) for j in range(Integer(3))])
>>> A
[ -x + 1 -1 -x^2 + 2*x - 1]
[-x^2 + 2*x - 1 -x + 1 -1]
[ -1 -x^2 + 2*x - 1 -x + 1]
>>> from sage.rings.function_field.hermite_form_polynomial import reversed_hermite_form
>>> B = copy(A)
>>> U = reversed_hermite_form(B, transformation=True)
>>> U * A == B
True
>>> B
[x^3 - 3*x^2 + 3*x - 2 0 0]
[ 0 x^3 - 3*x^2 + 3*x - 2 0]
[ x^2 - 2*x + 1 x - 1 1]
The function reversed_hermite_form()
computes the reversed hermite form,
which is reversed both row-wise and column-wise from the usual hermite form.
Let us check it:
sage: A.reverse_rows_and_columns()
sage: C = copy(A.hermite_form())
sage: C.reverse_rows_and_columns()
sage: C
[x^3 - 3*x^2 + 3*x - 2 0 0]
[ 0 x^3 - 3*x^2 + 3*x - 2 0]
[ x^2 - 2*x + 1 x - 1 1]
sage: C == B
True
>>> from sage.all import *
>>> A.reverse_rows_and_columns()
>>> C = copy(A.hermite_form())
>>> C.reverse_rows_and_columns()
>>> C
[x^3 - 3*x^2 + 3*x - 2 0 0]
[ 0 x^3 - 3*x^2 + 3*x - 2 0]
[ x^2 - 2*x + 1 x - 1 1]
>>> C == B
True
AUTHORS:
Kwankyu Lee (2021-05-21): initial version
- sage.rings.function_field.hermite_form_polynomial.reversed_hermite_form(mat, transformation=False)[source]#
Transform the matrix in place to reversed hermite normal form and optionally return the transformation matrix.
INPUT:
transformation
– boolean (default:False
); ifTrue
, return the transformation matrix
EXAMPLES:
sage: from sage.rings.function_field.hermite_form_polynomial import reversed_hermite_form sage: P.<x> = PolynomialRing(QQ) sage: A = matrix(P,3,[-(x-1)^((i-2*j) % 4) for i in range(3) for j in range(3)]) sage: A [ -1 -x^2 + 2*x - 1 -1] [ -x + 1 -x^3 + 3*x^2 - 3*x + 1 -x + 1] [ -x^2 + 2*x - 1 -1 -x^2 + 2*x - 1] sage: B = copy(A) sage: U = reversed_hermite_form(B, transformation=True) sage: U * A == B True sage: B [ 0 0 0] [ 0 x^4 - 4*x^3 + 6*x^2 - 4*x 0] [ 1 x^2 - 2*x + 1 1]
>>> from sage.all import * >>> from sage.rings.function_field.hermite_form_polynomial import reversed_hermite_form >>> P = PolynomialRing(QQ, names=('x',)); (x,) = P._first_ngens(1) >>> A = matrix(P,Integer(3),[-(x-Integer(1))**((i-Integer(2)*j) % Integer(4)) for i in range(Integer(3)) for j in range(Integer(3))]) >>> A [ -1 -x^2 + 2*x - 1 -1] [ -x + 1 -x^3 + 3*x^2 - 3*x + 1 -x + 1] [ -x^2 + 2*x - 1 -1 -x^2 + 2*x - 1] >>> B = copy(A) >>> U = reversed_hermite_form(B, transformation=True) >>> U * A == B True >>> B [ 0 0 0] [ 0 x^4 - 4*x^3 + 6*x^2 - 4*x 0] [ 1 x^2 - 2*x + 1 1]