Documentation

This is machine translation

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

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this 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?