[back] [prev] [next] [index] [root]
MatMLLL
Performs an MLLL reduction on the columns of an integer or
real matrix.
Syntax:
L := MatLLL(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]