4 releases

Uses new Rust 2021

0.3.1-alpha.1 Aug 29, 2022
0.3.0 Aug 26, 2022
0.2.10 Aug 22, 2022
0.1.0 Aug 18, 2022
0.0.3 Aug 14, 2022

#217 in Math

Download history 50/week @ 2022-08-09 157/week @ 2022-08-16 72/week @ 2022-08-23 24/week @ 2022-08-30 54/week @ 2022-09-06 34/week @ 2022-09-13 1/week @ 2022-09-20

124 downloads per month

MIT/Apache

16KB
368 lines

Automatic Differentiation Library

crates.io docs build rust-clippy analyze

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 🦀

  • 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.

No runtime deps