Define the Hermite Normal form $H$ for a matrix $A\in Z^{n\times n}$ as following:
$$H=UA$$ which in Mathematica is given as {u, h} = HermiteDecomposition[a]
Then for a system of homogeneous equations $Ax = [0]_{n}$ we normally compute a basis for the Nullspace of $A$, so any vector $x$ in $Ker(A)$ satisfies the system.
It results that $$Ax=[0]_{n} \rightarrow U^{-1}Hx =[0]_{n} \rightarrow Hx = [0]_{n}$$
Then computing such a basis for $A$ can be done in terms of $H$, where $H$ is an upper triangular matrix, so at first glance NullSpace runs faster for $H$ instead of $A$.
But I'm not very familiarized with the time-complexity of Mathematica's implementation of HermiteDecomposition and Nullspace (this last one over a prime modulus). I don't think this would be a good idea for big dimensions, this is, big $n$.
The thing is that I need a $\textit{fast}$ and efficient method for computing a basis for the nullspace of $A$ over $F_2$ when $n$ is considerably big. What can I do?
P.D = As a recommendation from MarcoB the time lapses are given with an example matrix of size $100\times 100$:
NullSpace only call: $0.010054$s
HermiteDecomposition + NullSpace: $0.071549$s
LatticeReduce + NullSpace: $0.258836$s
where the NullSpace call is always taken over $F_2$.
HermiteDecomposition
andNullspace
are already available, couldn't you just make up some fake number with which to try both out and compare timings (e.g. withRepeatedTiming
)? $\endgroup$NullSpace[mat,Modulus->2]
? $\endgroup$