ad-4.2.0.1: Automatic Differentiation

PortabilityGHC only
Stabilityexperimental
Maintainerekmett@gmail.com
Safe HaskellNone

Numeric.AD.Rank1.Sparse

Contents

Description

Higher order derivatives via a "dual number tower".

Synopsis

Documentation

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

Sparse Gradients

grad :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> f aSource

grad' :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> (a, f a)Source

gradWith :: (Traversable f, Num a) => (a -> a -> b) -> (f (Sparse a) -> Sparse a) -> f a -> f bSource

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

Variadic Gradients

Variadic combinators for variadic mixed-mode automatic differentiation.

Unfortunately, variadicity comes at the expense of being able to use quantification to avoid sensitivity confusion, so be careful when counting the number of auto calls you use when taking the gradient of a function that takes gradients!

class Num a => Grad i o o' a | i -> a o o', o -> a i o', o' -> a i oSource

Instances

Num a => Grad (Sparse a) [a] (a, [a]) a 
Grad i o o' a => Grad (Sparse a -> i) (a -> o) (a -> o') a 

vgrad :: Grad i o o' a => i -> oSource

Higher-Order Gradients

grads :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> Cofree f aSource

Variadic Higher-Order Gradients

class Num a => Grads i o a | i -> a o, o -> a iSource

Instances

Num a => Grads (Sparse a) (Cofree [] a) a 
Grads i o a => Grads (Sparse a -> i) (a -> o) a 

vgrads :: Grads i o a => i -> oSource

Sparse Jacobians (synonyms)

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

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

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

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

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

Sparse Hessians

hessian :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> f (f a)Source

hessian' :: (Traversable f, Num a) => (f (Sparse a) -> Sparse a) -> f a -> (a, f (a, f a))Source

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

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