Difference between revisions of "Functional differentiation"

From HaskellWiki
Jump to navigation Jump to search
(pointer to Numeric.FAD hackage 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

Introduction

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

  • Approximate the derivative by where is close to zero. (or at best the square root of the machine precision .
  • Compute the derivative of symbolically. This approach is particularly interesting for Haskell.

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    .

Haskell's derive h approximates the mathematician's . In functional analysis is called a (linear) function operator, because it maps functions to functions. In Haskell derive h is called a higher order function for the same reason. is in curried form. If it would be uncurried, you would write .

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.

Code