alg_tools
This package contains some general utility routines and tools for implementing iterative algorithms and (abstract) numerical computing in Rust. Former versions of the package were for Julia. They are no longer maintained. Included are:
- Linear operator, mapping, Euclidean space, and norm abstractions.
Matrices and vectors are supported via nalgebra.
There is also abstraction for
AXPY
andGEMV
operations. - Small (on stack) vectors and cubes that implement the relevant abstractions and vector space operations.
- Multi-dimensional linear grids, including the familiar-from-Matlab
one-dimensional
linspace
. - Algorithm iterator abstraction for generically implementing intermittent verbosity and stopping rules in iterative algorithms.
- The algorithm iterators can employ a logger to store intermittent results (e.g. function values) in memory to later write into a csv-file.
- Additional iterators and iteration tools, especially variants of
map
with predictable type signatures. - The
Float
and associated traits build upon num_traits to conveniently write code that works with any floating point number type. - Geometrical bisection trees for efficient representations of sums of functions and branch-and-bound optimisation.
Building the documentation
Integrated source code documentation may be built and opened with
cargo doc # build dependency docs
misc/cargo-d --open # build and open KaTeX-aware docs for this crate
The cargo-d
script ensures that KaTeX mathematics is rendered in the
generated documentation through an ugly workaround. Unfortunately,
rustdoc
, akin to Rust largely itself, is stuck in 80's 7-bit gringo ASCII
world, and does not support modern markdown features, such as mathematics.
Downloads
alg_tools is available from its Mercurial repository. You may either use Mercurial to clone the entire repository or you may download a snapshot as a zip or tarball. To clone use the command
hg clone https://tuomov.iki.fi/repos/alg_tools/
Contributing, distributing, derivative works
If you would like to contribute to this project, simply clone the repository
and email me a hg bundle
of your changes.
This software may be redistributed and derivate works may be created under the terms of the Anti-abuse License.