矩阵标准型

sympy.matrices.normalforms.smith_normal_form(m, domain=None)[源代码][源代码]

返回矩阵 \(m\) 在环 \(domain\) 上的 Smith 标准型。只有当环是主理想域时,这才会有效。

示例

>>> from sympy import Matrix, ZZ
>>> from sympy.matrices.normalforms import smith_normal_form
>>> m = Matrix([[12, 6, 4], [3, 9, 6], [2, 16, 14]])
>>> print(smith_normal_form(m, domain=ZZ))
Matrix([[1, 0, 0], [0, 10, 0], [0, 0, 30]])
sympy.matrices.normalforms.hermite_normal_form(
A,
*,
D=None,
check_rank=False,
)[源代码][源代码]

计算整数矩阵 A 的 Hermite 正规形式。

参数:
A : \(m imes n\) 矩阵 的整数。\(m imes n\)
Dint, 可选

\(W\)A 的 HNF。如果事先已知,一个正整数 D\(\det(W)\) 的任意倍数,则可以提供。在这种情况下,如果 A 的秩也为 \(m\),那么我们可以使用一种替代算法,该算法在模 D 下工作,以防止系数爆炸。

check_rank布尔值,可选(默认=False)

基本假设是,如果你为 D 传递一个值,那么你已经相信 A 的秩为 \(m\),所以我们不会浪费时间为你检查它。如果你确实希望进行此检查(并且在检查失败时使用普通的、非模 D 算法),那么请将 check_rank 设置为 True

返回:
Matrix

矩阵 A 的 HNF。

Raises:
DMDomainError

如果矩阵的域不是 ZZ

DMShapeError

如果使用了 D 算法,但矩阵的行数多于列数。

参考文献

[1]

Cohen, H. 计算代数数论课程. (参见算法2.4.5和2.4.8。)

示例

>>> from sympy import Matrix
>>> from sympy.matrices.normalforms import hermite_normal_form
>>> m = Matrix([[12, 6, 4], [3, 9, 6], [2, 16, 14]])
>>> print(hermite_normal_form(m))
Matrix([[10, 0, 2], [0, 15, 3], [0, 0, 2]])