LinearAlgebra[Modular]
Inverse
compute the Inverse of a square mod m Matrix
Adjoint
compute the Adjoint of a square mod m Matrix
Calling Sequence
Parameters
Description
Examples
Inverse(m, A, det, B, meth)
Adjoint(m, A, det, B, meth)
m
-
modulus
A
mod m Matrix
det
(optional) name to use for output determinant
B
(optional) Matrix to use for output Inverse or Adjoint
meth
(optional) method to use for computing Inverse or Adjoint
The Inverse and Adjoint functions compute the inverse and adjoint, respectively, of a square mod m Matrix.
If det is specified, it is assigned the value of the determinant on successful completion.
If B is specified, it must have dimensions and datatype identical to A, and will contain the inverse or adjoint on successful completion. In this case the command will return NULL.
The default method for the inverse is LU, while the default method for the adjoint is RET, and these can be changed by specification of meth.
Allowable options are:
LU
Obtain inverse or adjoint via LU decomposition.
inplaceLU
Obtain inverse or adjoint via LU decomposition destroying the
data in A in the process.
RREF
Obtain inverse or adjoint through application of row reduction
to an identity augmented mod m Matrix.
RET
Obtain inverse or adjoint through application of a row echelon
transform to A.
inplaceRET
transform to A, replacing A with the inverse or adjoint.
The LU and inplaceLU methods are the most efficient for small to moderate sized problems. The RET and inplaceRET methods are the most efficient for very large problems. The RREF method is the most flexible for nonsingular matrices.
For the inplaceRET method, B should never be specified, as the output replaces A. For this method, the commands always return NULL.
With the LU-based and RET-based methods, it is generally required that m be a prime, as mod m inverses are needed, but in some cases it is possible to obtain an LU decomposition or a Row-Echelon Transform for m composite.
For the cases where LU Decomposition or Row-Echelon Transform cannot be obtained for m composite, the function returns an error indicating that the algorithm failed because m is composite.
Note: There are cases with composite m for which the inverse and adjoint exist, but no LU decomposition or Row-Echelon Transform is possible.
If it exists, the RREF method always finds the mod m inverse. The RREF method also finds the adjoint if the Matrix is nonsingular.
The RET method is the only method capable of computing the adjoint if the matrix is singular. The inplaceRET method cannot be used to compute the adjoint of a singular matrix, as this operation cannot be performed in-place.
These commands are part of the LinearAlgebra[Modular] package, so they can be used in the form Inverse(..) and Adjoint(..) only after executing the command with(LinearAlgebra[Modular]). However, they can always be used in the form LinearAlgebra[Modular][Inverse](..) and LinearAlgebra[Modular][Adjoint](..).
Basic 3x3 Matrix.
with⁡LinearAlgebraModular:
p≔97
M≔Mod⁡p,Matrix⁡3,3,i,j↦rand⁡,integer
M≔779610865836802244
Mi≔Inverse⁡p,M
Mi≔16807220203256589
Multiply⁡p,M,Mi,Multiply⁡p,Mi,M
100010001,100010001
An example that fails with the LU and RET methods, but succeeds with RREF.
m≔6
M≔Mod⁡m,3,2,2,1,float8
M≔3.2.2.1.
Mi≔Inverse⁡m,M
Error, (in LinearAlgebra:-Modular:-LUDecomposition) no LU decomposition exists: modulus is composite
Mi≔Inverse⁡m,M,RET
Error, (in LinearAlgebra:-Modular:-Inverse) modulus is composite
Mi≔Inverse⁡m,M,RREF
Mi≔5.2.2.3.
Multiply⁡m,M,Mi,Multiply⁡m,Mi,M
1.0.0.1.,1.0.0.1.
An example where no inverse exists, but the adjoint does exist.
M≔Mod⁡m,2,4,4,4,float8
M≔2.4.4.4.
Error, (in LinearAlgebra:-Modular:-RowReduce) no inverse exists: modulus is composite
Ma≔Adjoint⁡m,M,det,RREF
Ma≔4.2.2.2.
det,Multiply⁡m,M,Ma,Multiply⁡m,Ma,M
4,4.0.0.4.,4.0.0.4.
An example where only the RET method succeeds at computing the adjoint.
m≔7
M≔Mod⁡m,1,1,1,1,integer
M≔1111
Ma≔Adjoint⁡m,M,RREF
Error, (in LinearAlgebra:-Modular:-RowReduce) matrix is singular
Ma≔Adjoint⁡m,M,LU
Error, (in LinearAlgebra:-Modular:-LUDecomposition) matrix is singular
Ma≔Adjoint⁡m,M,det,RET
Ma≔1661
0,0000,0000
See Also
LinearAlgebra/Details
LinearAlgebra[Modular][LUDecomposition]
LinearAlgebra[Modular][Mod]
LinearAlgebra[Modular][Multiply]
LinearAlgebra[Modular][RowEchelonTransform]
LinearAlgebra[Modular][RowReduce]
Download Help Document