# Functional differentiation

### From HaskellWiki

(Difference between revisions)

(pointer to Numeric.FAD hackage code) |
m (→Code) |
||

(3 intermediate revisions by 2 users not shown) | |||

Line 13: | Line 13: | ||

and the Haskell programmer writes |
and the Haskell programmer writes |
||

<haskell> |
<haskell> |
||

− | derive :: a -> (a -> a) -> (a -> a) |
+ | derive :: (Fractional a) => a -> (a -> a) -> (a -> a) |

derive h f x = (f (x+h) - f x) / h . |
derive h f x = (f (x+h) - f x) / h . |
||

</haskell> |
</haskell> |
||

Line 20: | Line 20: | ||

In Haskell <hask>derive h</hask> is called a higher order function for the same reason. |
In Haskell <hask>derive h</hask> is called a higher order function for the same reason. |
||

<math> D </math> is in curried form. If it would be uncurried, you would write <math> D(f,x) </math>. |
<math> D </math> is in curried form. If it would be uncurried, you would write <math> D(f,x) </math>. |
||

− | |||

== Blog Posts == |
== Blog Posts == |
||

Line 30: | Line 29: | ||

* [http://sigfpe.blogspot.com/2005/07/automatic-differentiation.html Automatic Differentiation] |
* [http://sigfpe.blogspot.com/2005/07/automatic-differentiation.html Automatic Differentiation] |
||

* [http://cdsmith.wordpress.com/2007/11/29/some-playing-with-derivatives/ Some Playing with Derivatives] |
* [http://cdsmith.wordpress.com/2007/11/29/some-playing-with-derivatives/ Some Playing with Derivatives] |
||

+ | * [http://conal.net/blog/posts/paper-beautiful-differentiation/ Beautiful differentiation by Conal Elliott.] The paper itself and link to video of ICFP talk on the subject are available from his [http://conal.net/papers/beautiful-differentiation/ site]. |
||

== Code == |
== Code == |
||

* [http://hackage.haskell.org/package/fad Forward accumulation mode Automatic Differentiation] Hackage package |
* [http://hackage.haskell.org/package/fad Forward accumulation mode Automatic Differentiation] Hackage package |
||

+ | * [http://hackage.haskell.org/package/vector-space Vector-space package], including derivatives as linear transformations satisfying chain rule. |
||

[[Category:Mathematics]] |
[[Category:Mathematics]] |

## Latest revision as of 08:32, 19 December 2010

## Contents |

## [edit] 1 Introduction

Functional differentiation means computing or approximating the derivative of a function. There are several ways to do this:

- Approximate the derivative
*f*'(*x*) by where*h*is close to zero. (or at best the square root of the machine precision . - Compute the derivative of
*f*symbolically. This approach is particularly interesting for Haskell.

## [edit] 2 Functional analysis

If you want to explain the terms Higher order function and Currying to mathematicians, this is certainly a good example. The mathematician writes

and the Haskell programmer writes

derive :: (Fractional a) => a -> (a -> a) -> (a -> a) derive h f x = (f (x+h) - f x) / h .

derive h

*D*.

In functional analysis *D* is called a (linear) function operator, because it maps functions to functions.

derive h

*D* is in curried form. If it would be uncurried, you would write *D*(*f*,*x*).

## [edit] 3 Blog Posts

There have been several blog posts on this recently. I think we should gather the information together and make a nice wiki article on it here. For now, here are links to articles on the topic.

- Overloading Haskell numbers, part 2, Forward Automatic Differentiation.
- Non-standard analysis, automatic differentiation, Haskell, and other stories.
- Automatic Differentiation
- Some Playing with Derivatives
- Beautiful differentiation by Conal Elliott. The paper itself and link to video of ICFP talk on the subject are available from his site.

## [edit] 4 Code

- Forward accumulation mode Automatic Differentiation Hackage package
- Vector-space package, including derivatives as linear transformations satisfying chain rule.