Saturation over ZZ¶
-
sage.matrix.matrix_integer_dense_saturation.
index_in_saturation
(A, proof=True)¶ The index of A in its saturation.
INPUT:
A
– matrix over \(\ZZ\)proof
– boolean (True
orFalse
)
OUTPUT:
An integer
EXAMPLES:
sage: from sage.matrix.matrix_integer_dense_saturation import index_in_saturation sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6]); C = A*B; C [11 16 21] [19 26 33] sage: index_in_saturation(C) 18 sage: W = C.row_space() sage: S = W.saturation() sage: W.index_in(S) 18
For any zero matrix the index in its saturation is 1 (see trac ticket #13034):
sage: m = matrix(ZZ, 3) sage: m [0 0 0] [0 0 0] [0 0 0] sage: m.index_in_saturation() 1 sage: m = matrix(ZZ, 2, 3) sage: m [0 0 0] [0 0 0] sage: m.index_in_saturation() 1
-
sage.matrix.matrix_integer_dense_saturation.
p_saturation
(A, p, proof=True)¶ INPUT:
- A – a matrix over ZZ
- p – a prime
- proof – bool (default: True)
OUTPUT:
The p-saturation of the matrix A, i.e., a new matrix in Hermite form whose row span a ZZ-module that is p-saturated.
EXAMPLES:
sage: from sage.matrix.matrix_integer_dense_saturation import p_saturation sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6]) sage: A.det() 6 sage: C = A*B; C [11 16 21] [19 26 33] sage: C2 = p_saturation(C, 2); C2 [ 1 8 15] [ 0 9 18] sage: C2.index_in_saturation() 9 sage: C3 = p_saturation(C, 3); C3 [ 1 0 -1] [ 0 2 4] sage: C3.index_in_saturation() 2
-
sage.matrix.matrix_integer_dense_saturation.
random_sublist_of_size
(k, n)¶ INPUT:
- k – an integer
- n – an integer
OUTPUT:
a randomly chosen sublist of range(k) of size n.
EXAMPLES:
sage: import sage.matrix.matrix_integer_dense_saturation as s sage: s.random_sublist_of_size(10,3) [0, 1, 5] sage: s.random_sublist_of_size(10,7) [0, 1, 3, 4, 5, 7, 8]
-
sage.matrix.matrix_integer_dense_saturation.
saturation
(A, proof=True, p=0, max_dets=5)¶ Compute a saturation matrix of A.
INPUT:
- A – a matrix over ZZ
- proof – bool (default: True)
- p – int (default: 0); if not 0 only guarantees that output is p-saturated
- max_dets – int (default: 4) max number of dets of submatrices to compute.
OUTPUT:
matrix – saturation of the matrix A.
EXAMPLES:
sage: from sage.matrix.matrix_integer_dense_saturation import saturation sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6]); C = A*B sage: C [11 16 21] [19 26 33] sage: C.index_in_saturation() 18 sage: S = saturation(C); S [11 16 21] [-2 -3 -4] sage: S.index_in_saturation() 1 sage: saturation(C, proof=False) [11 16 21] [-2 -3 -4] sage: saturation(C, p=2) [11 16 21] [-2 -3 -4] sage: saturation(C, p=2, max_dets=1) [11 16 21] [-2 -3 -4]
-
sage.matrix.matrix_integer_dense_saturation.
solve_system_with_difficult_last_row
(B, A)¶ Solve the matrix equation B*Z = A when the last row of \(B\) contains huge entries.
INPUT:
- B – a square n x n nonsingular matrix with painful big bottom row.
- A – an n x k matrix.
OUTPUT:
the unique solution to B*Z = A.
EXAMPLES:
sage: from sage.matrix.matrix_integer_dense_saturation import solve_system_with_difficult_last_row sage: B = matrix(ZZ, 3, [1,2,3, 3,-1,2,939239082,39202803080,2939028038402834]); A = matrix(ZZ,3,2,[1,2,4,3,-1,0]) sage: X = solve_system_with_difficult_last_row(B, A); X [ 290668794698843/226075992027744 468068726971/409557956572] [-226078357385539/1582531944194208 1228691305937/2866905696004] [ 2365357795/1582531944194208 -17436221/2866905696004] sage: B*X == A True