LinearAlgebra[Modular]
LinearSolve
solve linear system mod m
Calling Sequence
Parameters
Description
Examples
LinearSolve(m, M, naugment)
LinearSolve(m, M, naugment, inplace=val)
m
-
modulus
M
Matrix for solve
naugment
number of augmented columns in Matrix
val
inplace option true/false
The LinearSolve function solves the linear system described by the augmented Matrix M with naugment augmented columns.
The allowable datatypes are hardware integer (dtype=integer[4]/integer[8] or integer[]), hardware float (dtype=float[8]), or Maple integer (dtype=integer).
By default the inplace option is true, and the command returns a reduced row echelon form of the input system, throwing an error if it is inconsistent, or no reduced row echelon form exists (i.e. for some composite m).
If inplace is specified as false, the command returns the solution in forms of a sequence. The first element of the sequence is a Matrix (when naugment>1) or a Vector (when naugment=1) corresponding to a solution of the system, followed by the vectors in the nullspace. In the event of a unique solution (empty nullspace), only the one solution exists, so the return is just the first element. Note: even when inplace is set to false, the original input matrix is altered, so if this is not desired, the command should be called on a copy of the Matrix.
Note that this is just a high-level convenience function that uses RowReduce to do the actual work.
This command is part of the LinearAlgebra[Modular] package, so it can be used in the form LinearSolve(..) only after executing the command with(LinearAlgebra[Modular]). However, it can always be used in the form LinearAlgebra[Modular][LinearSolve](..).
with⁡LinearAlgebraModular:
Create a random Matrix with a duplicate row (copy 4rth row to 2nd)
p≔prevprime⁡216
p≔65521
M≔Create⁡p,4,6,random,integer,C_order
M≔37606644030791178664583455381615972331346542145607963669665135637135287449338505055023762114648316997482085463019432
ArrayTools:-Copy⁡6,M,18,M,6:
376066440307911786645834553816211464831699748208546301943265135637135287449338505055023762114648316997482085463019432
Now solve a copy obtaining row reduced form:
M2≔copy⁡M:
LinearSolve⁡p,M2,2:
M2
10052615556246090010592862380736734001430642213225873000000
Now solve another copy obtaining the solution in (solution vector, nullspace) form
M3≔copy⁡M:
sol≔LinearSolve⁡p,M3,2,inplace=false
sol≔55562460902380736734221322587300,5261592864306465520
Check the solution and nullspace
Multiply⁡p,M1..4,1..4,sol1,M1..4,5..6
4583455381546301943250505502375463019432,4583455381546301943250505502375463019432
Multiply⁡p,M1..4,1..4,sol2
0000
See Also
ArrayTools[Copy]
LinearAlgebra/Details
LinearAlgebra[LinearSolve]
LinearAlgebra[Modular][Create]
LinearAlgebra[Modular][RowReduce]
Download Help Document