LinearAlgebra[Modular]
LUDecomposition
compute in-place PLU Decomposition of a mod m Matrix
Calling Sequence
Parameters
Description
Examples
LUDecomposition(m, A, pvec, det)
m
-
modulus
A
mod m Matrix
pvec
permutation vector
det
name for determinant or 0
The LUDecomposition function computes an in-place PLU decomposition of a square mod m Matrix A placing the permutation information in pvec. Optionally, the determinant can also be computed.
Computation of an LU decomposition requires that m is a prime, but in some cases it can be computed when m is composite. If it cannot be computed for m composite, an error message returns.
The pvec parameter must be a Vector of type integer[4]/integer[8], integer, or anything, having at least n−1 entries, where the Matrix A is n⁢x⁢n.
If the determinant of the Matrix being decomposed is required, specify det as a name. Otherwise, specify as the value 0. On output, the name specified for det is assigned the value of the determinant.
Note: If the determinant is not required, set det to zero to avoid unnecessary calculations.
Since the computation is performed in-place, the LU decomposition is stored in compact form. On successful completion, the upper triangular Matrix is stored in the upper triangular part of A, and the lower triangular Matrix is stored in the lower triangular part of A, replacing diagonal entries with 1.
The permutation is also stored in a compact form in pvec. This vector can be interpreted as an ordered list of instructions on how to apply a permutation, where the first entry describes the row exchange required for the first row, the second describes the row exchange required for the second row, etcetera.
For example, for a 4⁢x⁢4 Matrix the permutation vector must have 3 elements. If these are [1, 4, 4], this corresponds to the following exchanges in the given order: 1<=>1, 2<=>4, 3<=>4.
Unlike a permutation Matrix, this format does not result in a unique representation for a permutation. For example, for a 4⁢x⁢4 Matrix, the identity permutation is given by [1,2,3], [3,2,1], [2,1,3], etcetera. Use of this format makes application of the permutation (or its inverse) to a Matrix or Vector quite simple. If the permutation Matrix is required, it can be obtained through application of the Permute function on an identity Matrix.
After obtaining the LU decomposition and permutation vector, it can be applied to the right-hand side of the original system (a mod m Matrix or Vector) to obtain the solution using the LUApply function, or explicitly by using Permute, ForwardSubstitute, and then BackwardSubstitute.
This command is part of the LinearAlgebra[Modular] package, so it can be used in the form LUDecomposition(..) only after executing the command with(LinearAlgebra[Modular]). However, it can always be used in the form LinearAlgebra[Modular][LUDecomposition](..).
Compute LU decomposition of a random 5 x 5 Matrix.
with⁡LinearAlgebraModular:
p≔97
A≔Mod⁡p,Matrix⁡5,5,i,j↦rand⁡,integer:
779610865836802244396039431255224714529214873357
A2≔Copy⁡p,A:
pv≔Vector⁡4:
LUDecomposition⁡p,A2,pv,det:
A2,pv,det
77961086583720406327946017964295663778625440105,1234,65
Check the determinant.
modp⁡LinearAlgebra:-Determinant⁡Matrix⁡5,5,i,j↦Ai,j,p
65
Construct a 'B' in A X = B, and compute X.
B≔Mod⁡p,Matrix⁡5,2,i,j↦rand⁡,integer
B≔65169396714470582529
X≔Copy⁡p,B:
LUApply⁡p,A2,pv,X:
X
1137122057118368111
Check it.
Multiply⁡p,A,X,B
65169396714470582529,65169396714470582529
Using float[8] with a nontrivial permutation
p≔13:
A≔Mod⁡13,0,0,12,12,0,3,1,1,1,float8
A≔0.0.12.12.0.3.1.1.1.
pv≔Vector⁡2:
LUDecomposition⁡p,A2,pv,0:
A2,pv
12.0.3.12.1.4.0.0.12.,23
Now apply it to a random Vector and check.
B≔Mod⁡p,Vector⁡3,i↦rand⁡,float8
B≔5.3.5.
Apply it manually.
Permute⁡p,pv,X,true,false:
ForwardSubstitute⁡p,A2,X,true:
BackwardSubstitute⁡p,A2,X:
8.2.8.
5.3.5.,5.3.5.
See Also
LinearAlgebra/Details
LinearAlgebra[Modular][BackwardSubstitute]
LinearAlgebra[Modular][Copy]
LinearAlgebra[Modular][ForwardSubstitute]
LinearAlgebra[Modular][LUApply]
LinearAlgebra[Modular][Mod]
LinearAlgebra[Modular][Multiply]
LinearAlgebra[Modular][Permute]
Download Help Document