Given a linear Diophantine equation $Ax = b$ (i.e. an integer matrix with target vector also integer), we want to find a solution of this equation.
i1 : colList = {{1,3,7}, {2,4,-31}, {1,6,101}, {3,-2,47}, {8,9,1}};
|
i2 : A = transpose matrix colList;
3 5
o2 : Matrix ZZ <--- ZZ
|
i3 : b = {1, 2, 3}
o3 = {1, 2, 3}
o3 : List
|
i4 : getLinearDiophantineSolution(b, A)
o4 = {-9268, 3946, 1941, -188, 0}
o4 : List
|
i5 : sol = getLinearDiophantineSolution(b, colList )
o5 = {-9268, 3946, 1941, -188, 0}
o5 : List
|
i6 : sum apply(#sol, i->(sol#i)*(colList#i) )
o6 = {1, 2, 3}
o6 : List
|
When the context is clear, set the Safe option to false in order to avoid routine checks.
i7 : A = matrix{ {1, 0, 0, 0, 0}, {0, 2, 0, 0, 0}, {3, 4, 5, 6, 8} }
o7 = | 1 0 0 0 0 |
| 0 2 0 0 0 |
| 3 4 5 6 8 |
3 5
o7 : Matrix ZZ <--- ZZ
|
i8 : b = {1, 2, 3}
o8 = {1, 2, 3}
o8 : List
|
i9 : getLinearDiophantineSolution(b, A, Safe => false)
o9 = {1, 1, 16, -14, 0}
o9 : List
|
The object getLinearDiophantineSolution is a method function with options.