Automatic Differentiation Library
AUTOmatic Derivatives & Jacobians
by djmaxus and you
- pre-alpha
- play-ready
Contents
Motivation
For the living (and for my heart), I do research & development in the area of computational mathematics and wrote a whole bunch of sophisticated Jacobians by hand.
One day, I learned about automatic differentiation based on dual numbers. Almost the same day, I learned about Rust as well :crab:
- No more devastating hand-written derivatives!
- No more unsafe code!
Project goals
- Develop open-source automatic differentiation library for both academic and commercial computational mathematitians
- Gain experience of Rust programming
Anticipated features
- Basic dual arithmetics as standalone feature
- Number of variables to differentiate
- single
- multiple
- static
- dynamic
- Calculation tracking (partial derivatives of intermediate values)
- Third-party crates support (as features)
-
num - linear algebra crates
-
- Implement dual arithmetics as pure trait, then implement it for a few structures
- Advanced features
-
Inter-operability of different dual types (e.g., single and multiple dynamic)
-
Arbitrary type of dual number components
-
Rust-alike safety of interfaces
e.g.,
Fn(...) -> Result<_,_>for binary operations and UUID-based tracking of variables -
Numerical verification (or replacement) of derivatives (by definition)
-
Macro for automatic extensions of regular (i.e. non-dual) functions
-
no
std -
Optional calculation of derivatives
- Iterator implementation as possible approach to lazy evaluation
-
You are very welcome to introduce issues to promote most wanted features or to report a bug.