Portability GHC only experimental ekmett@gmail.com

Description

Higher order derivatives via a "dual number tower".

Synopsis

# Taylor Series

taylor :: Fractional a => UU a -> a -> a -> [a]Source

taylor0 :: Fractional a => UU a -> a -> a -> [a]Source

# Maclaurin Series

maclaurin :: Fractional a => UU a -> a -> [a]Source

maclaurin0 :: Fractional a => UU a -> a -> [a]Source

# Derivatives

diff :: Num a => UU a -> a -> aSource

diff' :: Num a => UU a -> a -> (a, a)Source

diffs :: Num a => UU a -> a -> [a]Source

diffs0 :: Num a => UU a -> a -> [a]Source

diffsF :: (Functor f, Num a) => UF f a -> a -> f [a]Source

diffs0F :: (Functor f, Num a) => UF f a -> a -> f [a]Source

# Directional Derivatives

du :: (Functor f, Num a) => FU f a -> f (a, a) -> aSource

du' :: (Functor f, Num a) => FU f a -> f (a, a) -> (a, a)Source

dus :: (Functor f, Num a) => FU f a -> f [a] -> [a]Source

dus0 :: (Functor f, Num a) => FU f a -> f [a] -> [a]Source

duF :: (Functor f, Functor g, Num a) => FF f g a -> f (a, a) -> g aSource

duF' :: (Functor f, Functor g, Num a) => FF f g a -> f (a, a) -> g (a, a)Source

dusF :: (Functor f, Functor g, Num a) => FF f g a -> f [a] -> g [a]Source

dus0F :: (Functor f, Functor g, Num a) => FF f g a -> f [a] -> g [a]Source

diffsM :: (Monad m, Num a) => UF m a -> a -> m [a]Source

diffs0M :: (Monad m, Num a) => UF m a -> a -> m [a]Source

# Exposed Types

type UU a = forall s. Mode s => AD s a -> AD s aSource

A scalar-to-scalar automatically-differentiable function.

type UF f a = forall s. Mode s => AD s a -> f (AD s a)Source

A scalar-to-non-scalar automatically-differentiable function.

type FU f a = forall s. Mode s => f (AD s a) -> AD s aSource

A non-scalar-to-scalar automatically-differentiable function.

type FF f g a = forall s. Mode s => f (AD s a) -> g (AD s a)Source

A non-scalar-to-non-scalar automatically-differentiable function.

class Lifted t => Mode t whereSource

Methods

lift :: Num a => a -> t aSource

Embed a constant

(<+>) :: Num a => t a -> t a -> t aSource

Vector sum

(*^) :: Num a => a -> t a -> t aSource

Scalar-vector multiplication

(^*) :: Num a => t a -> a -> t aSource

Vector-scalar multiplication

(^/) :: Fractional a => t a -> a -> t aSource

Scalar division

zero :: Num a => t aSource

'zero' = 'lift' 0

Instances

 Mode Id Lifted Forward => Mode Forward Lifted Reverse => Mode Reverse Lifted Tower => Mode Tower Mode f => Mode (AD f) Mode f => Mode (Iterated f) (Mode f, Mode g) => Mode (ComposeMode f g)