矩阵标准型¶
- 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
。
- A : \(m imes n\)
- 返回:
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]])