LinearAlgebra[Modular][LUDecomposition] - compute in-place PLU Decomposition of a mod m Matrix
|
Calling Sequence
|
|
LUDecomposition(m, A, pvec, det)
|
|
Parameters
|
|
m
|
-
|
modulus
|
A
|
-
|
mod m Matrix
|
pvec
|
-
|
permutation vector
|
det
|
-
|
name for determinant or 0
|
|
|
|
|
Description
|
|
•
|
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 entries, where the Matrix A is .
|
•
|
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.
|
|
Unlike a permutation Matrix, this format does not result in a unique representation for a permutation. For example, for a 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](..).
|
|
|
Examples
|
|
Compute LU decomposition of a random 5 x 5 Matrix.
>
|
|
>
|
|
| (1) |
>
|
|
>
|
|
| (2) |
>
|
|
>
|
|
>
|
|
>
|
|
| (3) |
Check the determinant.
>
|
|
| (4) |
Construct a 'B' in A X = B, and compute X.
>
|
|
| (5) |
>
|
|
>
|
|
>
|
|
| (6) |
Check it.
>
|
|
| (7) |
Using float[8] with a nontrivial permutation
>
|
|
>
|
|
| (8) |
>
|
|
>
|
|
>
|
|
>
|
|
| (9) |
Now apply it to a random Vector and check.
>
|
|
| (10) |
>
|
|
Apply it manually.
>
|
|
>
|
|
>
|
|
>
|
|
| (11) |
>
|
|
| (12) |
|
|