[][src]Crate hyperdual

Dual Numbers

Fully-featured Dual Number implementation with features for automatic differentiation of multivariate vectorial functions into gradients.

Usage

extern crate hyperdual;

use hyperdual::{Dual, Hyperdual, Float, differentiate, U3};

fn main() {
    // find partial derivative at x=4.0
    let univariate = differentiate(4.0f64, |x| x.sqrt() + Dual::from_real(1.0));
    assert!((univariate - 0.25).abs() < 1e-16, "wrong derivative");

    // find the partial derivatives of a multivariate function
    let x: Hyperdual<f64, U3> = Hyperdual::from_slice(&[4.0, 1.0, 0.0]);
    let y: Hyperdual<f64, U3> = Hyperdual::from_slice(&[5.0, 0.0, 1.0]);

    let multivariate = x * x + (x * y).sin() + y.powi(3);
    assert!((multivariate[0] - 141.91294525072763).abs() < 1e-13, "f(4, 5) incorrect");
    assert!((multivariate[1] - 10.04041030906696).abs() < 1e-13, "df/dx(4, 5) incorrect");
    assert!((multivariate[2] - 76.63232824725357).abs() < 1e-13, "df/dy(4, 5) incorrect");
}
Previous Work

Modules

linalg

Structs

DefaultAllocator

An allocator based on GenericArray and VecStorage for statically-sized and dynamically-sized matrices respectively.

Dynamic

Dim of dynamically-sized algebraic entities.

Hyperdual

Dual Number structure

U0

A type level dimension.

U1

A type level dimension with a value of 1.

U2

A type level dimension.

U3

A type level dimension.

U4

A type level dimension.

U5

A type level dimension.

U6

A type level dimension.

U7

A type level dimension.

U8

A type level dimension.

U9

A type level dimension.

U10

A type level dimension.

U11

A type level dimension.

U12

A type level dimension.

U13

A type level dimension.

U14

A type level dimension.

U15

A type level dimension.

U16

A type level dimension.

U17

A type level dimension.

U18

A type level dimension.

U19

A type level dimension.

U20

A type level dimension.

U21

A type level dimension.

U22

A type level dimension.

U23

A type level dimension.

U24

A type level dimension.

U25

A type level dimension.

U26

A type level dimension.

U27

A type level dimension.

U28

A type level dimension.

U29

A type level dimension.

U30

A type level dimension.

U31

A type level dimension.

U32

A type level dimension.

U33

A type level dimension.

U34

A type level dimension.

U35

A type level dimension.

U36

A type level dimension.

U37

A type level dimension.

U38

A type level dimension.

U39

A type level dimension.

U40

A type level dimension.

U41

A type level dimension.

U42

A type level dimension.

U43

A type level dimension.

U44

A type level dimension.

U45

A type level dimension.

U46

A type level dimension.

U47

A type level dimension.

U48

A type level dimension.

U49

A type level dimension.

U50

A type level dimension.

U51

A type level dimension.

U52

A type level dimension.

U53

A type level dimension.

U54

A type level dimension.

U55

A type level dimension.

U56

A type level dimension.

U57

A type level dimension.

U58

A type level dimension.

U59

A type level dimension.

U60

A type level dimension.

U61

A type level dimension.

U62

A type level dimension.

U63

A type level dimension.

U64

A type level dimension.

U65

A type level dimension.

U66

A type level dimension.

U67

A type level dimension.

U68

A type level dimension.

U69

A type level dimension.

U70

A type level dimension.

U71

A type level dimension.

U72

A type level dimension.

U73

A type level dimension.

U74

A type level dimension.

U75

A type level dimension.

U76

A type level dimension.

U77

A type level dimension.

U78

A type level dimension.

U79

A type level dimension.

U80

A type level dimension.

U81

A type level dimension.

U82

A type level dimension.

U83

A type level dimension.

U84

A type level dimension.

U85

A type level dimension.

U86

A type level dimension.

U87

A type level dimension.

U88

A type level dimension.

U89

A type level dimension.

U90

A type level dimension.

U91

A type level dimension.

U92

A type level dimension.

U93

A type level dimension.

U94

A type level dimension.

U95

A type level dimension.

U96

A type level dimension.

U97

A type level dimension.

U98

A type level dimension.

U99

A type level dimension.

U100

A type level dimension.

U101

A type level dimension.

U102

A type level dimension.

U103

A type level dimension.

U104

A type level dimension.

U105

A type level dimension.

U106

A type level dimension.

U107

A type level dimension.

U108

A type level dimension.

U109

A type level dimension.

U110

A type level dimension.

U111

A type level dimension.

U112

A type level dimension.

U113

A type level dimension.

U114

A type level dimension.

U115

A type level dimension.

U116

A type level dimension.

U117

A type level dimension.

U118

A type level dimension.

U119

A type level dimension.

U120

A type level dimension.

U121

A type level dimension.

U122

A type level dimension.

U123

A type level dimension.

U124

A type level dimension.

U125

A type level dimension.

U126

A type level dimension.

U127

A type level dimension.

Traits

Allocator

A matrix allocator of a memory buffer that may contain R::to_usize() * C::to_usize() elements of type N.

Dim

Trait implemented by any type that can be used as a dimension. This includes type-level integers and Dynamic (for dimensions not known at compile-time).

DimAdd
DimDiv
DimMax
DimMin
DimMul
DimName

Trait implemented exclusively by type-level integers.

DimNameAdd
DimNameDiv
DimNameMax
DimNameMin
DimNameMul
DimNameSub
DimSub
Float

Generic trait for floating point numbers

FloatConst
IsDynamic

Trait implemented by Dynamic.

IsNotStaticOne

Trait implemented by Dynamic and type-level integers different from U1.

NamedDim
Num

The base trait for numeric types, covering 0 and 1 values, comparisons, basic numeric operations, and string conversion.

One

Defines a multiplicative identity element for Self.

Zero

Defines an additive identity element for Self.

Functions

differentiate

Evaluates the function using dual numbers to get the partial derivative at the input point

extract_jacobian_and_result
hyperspace_from_vector
vector_from_hyperspace

Type Definitions

DimDiff
DimMaximum
DimMinimum
DimNameDiff
DimNameMaximum
DimNameMinimum
DimNameProd
DimNameQuot
DimNameSum
DimProd
DimQuot
DimSum
Dual
DualN
Owned

The owned data storage that can be allocated from S.