Generalized (hyper) dual numbers for the calculation of exact (partial) derivatives
Project description
num-dual
Generalized, recursive, scalar and vector (hyper) dual numbers for the automatic and exact calculation of (partial) derivatives. Including bindings for python.
Installation and Usage
Python
You can install the python package either from pypi:
pip install num_dual
or from source (you need a rust compiler for that):
pip install git+https://github.com/itt-ustutt/num-dual
Rust
Add this to your Cargo.toml
:
[dependencies]
num-dual = "0.3"
Example
Python
Compute the first and second derivative of a scalar-valued function.
from num_dual import derive2
import numpy as np
def f(x):
return np.exp(x) / np.sqrt(np.sin(x)**3 + np.cos(x)**3)
x = derive2(1.5)
result = f(x)
print('f(x) = {}'.format(result.value))
print('df/dx = {}'.format(result.first_derivative))
print('d2f/dx2 = {}'.format(result.second_derivative))
Rust
This example defines a generic function that can be called using any (hyper) dual number and automatically calculates derivatives.
use num_dual::*;
fn f<D: DualNum<f64>>(x: D, y: D) -> D {
x.powi(3) * y.powi(2)
}
fn main() {
let (x, y) = (5.0, 4.0);
// Calculate a simple derivative
let x_dual = Dual64::from(x).derive();
let y_dual = Dual64::from(y);
println!("{}", f(x_dual, y_dual)); // 2000 + [1200]ε
// Calculate a gradient
let xy_dual_vec = StaticVec::new_vec([x,y]).map(DualVec64::<2>::from).derive();
println!("{}", f(xy_dual_vec[0], xy_dual_vec[1]).eps); // [1200, 1000]
// Calculate a Hessian
let xy_dual2 = StaticVec::new_vec([x,y]).map(Dual2Vec64::<2>::from).derive();
println!("{}", f(xy_dual2[0], xy_dual2[1]).v2); // [[480, 600], [600, 250]]
// for x=cos(t) and y=sin(t) calculate the third derivative w.r.t. t
let t = Dual3_64::from(1.0).derive();
println!("{}", f(t.cos(), t.sin()).v3); // 7.358639755305733
}
Documentation
- You can find the documentation of the rust crate here.
- The documentation of the python package can be found here.
Python
For the following commands to work you have to have the package installed (see: installing from source).
cd docs
make html
Open _build/html/index.html
in your browser.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for num_dual-0.3.0-cp36-abi3-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc446bec8194042de4799c1e35213c120a5af77b8c5e21f98ecb365ec17790e9 |
|
MD5 | 54c0696985cf47d0cb9e53abeceb6b0c |
|
BLAKE2b-256 | a6185ea076330d0b57a1cf0b5bced3c54c1dc8b67bc52381f44829fc5adf5ff3 |
Hashes for num_dual-0.3.0-cp36-abi3-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9bfde08db0e059c6d0b97921ae66d4c7a61e5f38657791689cf0c7d65514d86 |
|
MD5 | e264c95e18dadfb4097fadbdb3de6eaa |
|
BLAKE2b-256 | 042aab72f0ba6f97df2021531d29d34e4b26872ffb7cd88f27c2fbd603666210 |
Hashes for num_dual-0.3.0-cp36-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b17a35e3f2533a4e02b5c23f53de31c0dc971b96693afe64c6902006d65966f5 |
|
MD5 | 6f54ea90c8b57d449aa29c169effec9e |
|
BLAKE2b-256 | 52b7168d34f7b03a3ee169d5df82f3c996782426e074cd130143dd1a98fa85bd |
Hashes for num_dual-0.3.0-cp36-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 34d92f513ce7f733c57ac452fcd80119246b6000694d1fd0c8a3fa7c4103587e |
|
MD5 | de41130103bf4ff5e194b15bb7f6c8f0 |
|
BLAKE2b-256 | 221c81664ed1239809c6c526a8395250b1e639e164dc5f5aa0893d580c8ea968 |
Hashes for num_dual-0.3.0-cp36-abi3-macosx_10_7_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76ed0829b88c976ba27194bf073180d1dd88f97853fba0d8e8d52a53c10ee835 |
|
MD5 | fd50f612912fe51e9aa89cbec8cb7262 |
|
BLAKE2b-256 | 28bc286d67f9b8f3e96224f461abcca147a2d8843ae7254d8d574a85a758b56f |