solution of a linear integer coefficient system using modular methods
IntegerLinearSolve(A, rcol, meth)
Matrix (possibly augmented)
number of columns that represent variables
(optional) argument of the form method='chrem' or method='padic' (the default)
The IntegerLinearSolve function constructs the rational solution(s) of a linear integer coefficient system in Matrix form. This is a programmer level function, it does not perform argument checking. Thus, argument checking must be handled external to this function.
It is possible to solve systems with an arbitrary number of augmented columns. If one augmented column is present, the output is a Vector with dimension rcol. If multiple augmented columns are present, the output is a Matrix where each column is of length rcol and represents the solution for the corresponding right-hand side vector in the augmented part of the input Matrix.
It is also possible to obtain solutions with free parameters. These free parameters represent the nullspace vectors of the input Matrix, and are output after the solution. In this case, the output is a sequence.
Note: Regardless of the number of augmented columns, the trailing nullspace is described by Vectors with dimension rcol.
The default method is to solve the system modulo a machine-sized prime and construct rational solutions using p-adic lifting. For large linear systems or systems with large solutions this is the fastest method. The optional argument method='padic' forces the use of this method.
Alternatively, one can specify the optional argument method='chrem' and the system will be solved modulo multiple primes and the solution recovered using the Chinese remainder theorem. This method can be faster in some cases; however, it is a probabilistic approach. Information on controlling the probabilistic behavior can be found in _EnvProbabilistic.
This function is also available in LinearSolve as method='modular'.
This command is part of the LinearAlgebra[Modular] package, so it can be used in the form IntegerLinearSolve(..) only after executing the command with(LinearAlgebra[Modular]). However, it can always be used in the form LinearAlgebra[Modular][IntegerLinearSolve](..).
A 3x3 system with 1 augmented column.
M ≔ Matrix⁡2,1,3,−1,4,3,1,3,−2,1,−3,5
X ≔ IntegerLinearSolve⁡M,3
A 3x3 system with 3 augmented columns.
M ≔ Matrix⁡2,1,3,−1,−2,−5,4,3,1,3,1,3,−2,1,−3,5,−3,2
A rank deficient 3x3 system with 3 augmented columns.
M ≔ Matrix⁡2,1,3,−1,−2,−5,4,3,1,3,1,3,2,2,−2,4,3,8
A rank deficient 4x4 matrix which returns nullspace only.
M ≔ Matrix⁡−85,−55,−30,−35,97,50,47,56,49,63,−14,−59,45,−8,53,92
X ≔ IntegerLinearSolve⁡M,4
An inconsistent 3x3 system.
M ≔ Matrix⁡2,1,3,−1,4,3,1,3,2,2,−2,5
Error, (in LinearAlgebra:-Modular:-IntegerLinearSolve) system is inconsistent
Download Help Document