Portability GHC only experimental ekmett@gmail.com None

Description

Higher order derivatives via a "dual number tower".

Synopsis

# Documentation

Instances

data Sparse a Source

We only store partials in sorted order, so the map contained in a partial will only contain partials with equal or greater keys to that of the map in which it was found. This should be key for efficiently computing sparse hessians. there are only (n + k - 1) choose k distinct nth partial derivatives of a function with k inputs.

Instances

 Typeable1 Sparse (Num a, Bounded a) => Bounded (Sparse a) (Num a, Enum a) => Enum (Sparse a) (Num a, Eq a) => Eq (Sparse a) Floating a => Floating (Sparse a) Fractional a => Fractional (Sparse a) Data a => Data (Sparse a) Num a => Num (Sparse a) (Num a, Ord a) => Ord (Sparse a) Real a => Real (Sparse a) RealFloat a => RealFloat (Sparse a) RealFrac a => RealFrac (Sparse a) Show a => Show (Sparse a) Erf a => Erf (Sparse a) InvErf a => InvErf (Sparse a) Num a => Mode (Sparse a) Num a => Jacobian (Sparse a) Num a => Grad (Sparse a) [a] (a, [a]) a Num a => Grads (Sparse a) (Cofree [] a) a Grads i o a => Grads (Sparse a -> i) (a -> o) a Grad i o o' a => Grad (Sparse a -> i) (a -> o) (a -> o') a

auto :: Mode t => Scalar t -> tSource

Embed a constant

grad :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f aSource

grad' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f a)Source

grads :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> Cofree f aSource

gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f bSource

gradWith' :: (Traversable f, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f b)Source

# Sparse Jacobians (synonyms)

jacobian :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f a)Source

jacobian' :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f a)Source

jacobianWith :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f b)Source

jacobianWith' :: (Traversable f, Functor g, Num a) => (a -> a -> b) -> (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f b)Source

jacobians :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (Cofree f a)Source

# Sparse Hessians

hessian :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> f (f a)Source

hessian' :: (Traversable f, Num a) => (forall s. f (AD s (Sparse a)) -> AD s (Sparse a)) -> f a -> (a, f (a, f a))Source

hessianF :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (f (f a))Source

hessianF' :: (Traversable f, Functor g, Num a) => (forall s. f (AD s (Sparse a)) -> g (AD s (Sparse a))) -> f a -> g (a, f (a, f a))Source