Sheafhom 2.0 is a freeware package for large sparse linear algebra
computations over the integers and other exact number types. It
provides efficient algorithms for the Smith normal form of sparse
matrices, and dense algorithms for LLL and Hermite normal form.
Graphs and windows are provided to show the progress of the
computation in real time, which helps in tuning the algorithms for
specific applications. The package is motivated by algebraic
topology, and provides partial support for items from category theory
as first-class objects: vector spaces, morphisms of vector spaces, and
Download the Java source code and documentation.
shh.jar, which contains the runtime Java classes.
Here are three ways to learn more about the package.
shh.jar and run the
On Windows and some other operating systems, you can simply
double-click on the
java -jar shh.jar
- By default,
the demo sets up a 1000 × 2000 matrix in which
only 0.3% of the entries are non-zero. About half the non-zeros
are 1; the other half are -2. These defaults can be changed
with the GUI that's provided.
- The demo computes the
Smith normal form (the elementary divisors) of the matrix, with
a window showing how the sparsity changes in real time. The
top bar gives the pivot location, the sparsity (percentage of non-zeros),
and the percentage of non-zeros represented by the arbitrary-precision
integer data type.
- The biggest time constraint is not the computation, but
painting the window. If you minimize (hide) the window, the
computation will go much faster. If you close (kill) the
window, the whole process stops.
Open the documentation at
doc/index.html in a browser.
Start with the articles on CSparse, MPDQ, and ExactCategoryMorphism.
If you prefer to read source code, start with the
main methods in the following files.
csparse/Test1.java runs a bare-bones Smith normal form computation
on a small matrix.
util/Demo.java runs Smith normal form on a large matrix.
csparse/DenseMatrixZ.java illustrates LLL.
csparse/TestHNF.java illustrates Hermite normal form.
homolalg/QvspMorphism.java works with
objects and arrows in
the category of vector spaces over Q.