Documentation

This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.

linalg::hermiteForm

Hermite normal form of a matrix

MuPAD® notebooks are not recommended. Use MATLAB® live scripts instead.

MATLAB live scripts support most MuPAD functionality, though there are some differences. For more information, see Convert MuPAD Notebooks to MATLAB Live Scripts.

Syntax

linalg::hermiteForm(A, <var>, <All>)

Description

linalg::hermiteForm(A) returns the Hermite normal form of a nonsingular integer square matrix A. The Hermite normal form of a matrix is an upper-triangular matrix H, such that Hjj ≥ 0 and for j > i. If matrix A is not square or singular, linalg::hermiteForm simply returns an upper-triangular matrix.

If matrix A is not of the domain Dom::Matrix(Dom::Integer) then linalg::hermiteForm converts A into a matrix of this domain for intermediate computations. If this conversion fails, then linalg::hermiteForm issues an error message.

linalg::hermiteForm(A, var) returns the Hermite normal form of A assuming that the elements of A are univariate polynomials in the variable var. If A does not contain var, then hermiteForm(A) and hermiteForm(A,var) return different results.

linalg::hermiteForm(A, <var>, All) returns the list [H, U], where H is the Hermite normal form of A, and U is a unimodular transformation matrix, such that H = U*A. You can use the All option with or without specifying the variable var.

Examples

Example 1

Create the following matrix of integers.

A := matrix([[9, -36, 30], [-36, 192, -180], [30, -180, 180]])

Find the Hermite normal form of this matrix.

linalg::hermiteForm(A)

Use the All option to find the corresponding transformation matrix.

[H, U] := linalg::hermiteForm(A, All)

Verify that H = U*A.

H = U*A

Example 2

Create the following matrix of polynomials.

B := matrix([[-(x - 3)^2*(x - 2),(x - 3)*(x - 2)*(x - 4)],
             [(x - 3)*(x - 2)*(x - 4),-(x - 3)^2*(x - 4)]
            ])

Find the Hermite normal form of this matrix.

linalg::hermiteForm(B)

Use the All option to find the corresponding transformation matrix.

[H, U] := linalg::hermiteForm(B, All)

Example 3

If a matrix does not contain a particular variable, and you call linalg::hermiteForm specifying that variable as the second argument, then the result differs from what you get without specifying that variable. For example, create a matrix that does not contain any variables.

A := matrix([[9, -36, 30], [-36, 192, -180], [30, -180, 180]])

Call linalg::hermiteForm specifying variable x as the second argument. In this case, linalg::hermiteForm assumes that the elements of A are univariate polynomials in x.

linalg::hermiteForm(A, x)

Call linalg::hermiteForm without specifying variables. In this case, linalg::hermiteForm treats A as a matrix of integers.

linalg::hermiteForm(A)

Parameters

A

An integer matrix of category Cat::Matrix

Options

All

Returns the list [H, U], where H is the Hermite normal form of A, and U is a corresponding transformation matrix.

Return Values

Matrix of the same domain type as A. With the option All, linalg::hermiteForm returns the list [H, U], where H is a matrix of the same domain type as A, and U is a corresponding transformation matrix.

Algorithms

If A is an n×n matrix with coefficients in then its Hermite normal form is an n×n matrix H = (hij), such that H = AU with .

The Hermite normal form H is unique if A is matrix of full row rank. The matrix U is not unique.

If A is a square matrix, then the product of the diagonal elements of its Hermite normal form is, up to the sign, the determinant of A.

Was this topic helpful?