[back] [prev] [next] [index] [root]

 


MatMLLL

Performs an MLLL reduction on the columns of an integer or real matrix.

Syntax:

L := MatLLL(M);

list
  L  
matrix
  M  

Description:

Performs a MLLL reduction on the columns of an integer or real matrix M. Let M \in {R}^{m \times (n+1)} and let a|1, … ,a|{n+1} \in {R}^m be the columns of M. The MatMLLL function expects that a|1, … ,a|n are linearly independent and that a|{n+1} has a non-zero entry. It computes columns b|1, … ,b|{n+1} \in {R}^m of B such that {Z} cdot a|1 + cdots + {Z} cdot a|{n+1} = {Z} cdot b|1 + cdots + {Z} cdot b|{n+1} and additionally a transformation matrix T \in {R}^{(n+1) \times (n+1)} with B = M cdot T. Furthermore a flag is returned. If it is true, b|1, … ,b|{n+1} are linearly independent. Otherwise all entries of b|{n+1} are zero. These results are stored in a list containing the reduced matrix B, the unimodular transformation matrix T and the flag.


Example:

MLLL-Reduction of a matrix:

kash> M := Mat(Z, [ [ 234, 469, -54411 ],
> [ -6546, -13126, 1531763 ], [ -6312, -12657, 1477352 ] ]);
[    234     469  -54411]
[  -6546  -13126 1531763]
[  -6312  -12657 1477352]
kash> L := MatMLLL(M);
[ [ 1  1  0]
    [-1  0  0]
    [ 0  1  0], [ -794943 -1327888  4198061]
    [  427600   714271 -2258136]
    [     267      446    -1410], true ]
kash> L[1];
[ 1  1  0]
[-1  0  0]
[ 0  1  0]
kash> M*L[2];
> [ 1  1  0]
[-1  0  0]
[ 0  1  0]


<- back[back] [prev] [next] [index] [root]