
On Thu, Nov 29, 2007 at 04:25:43PM -0800, Dan Weston wrote:
I must be missing something, because to me the contract seems to be much simpler to express (than the Functor + Isomorphism route you seem to me to be heading towards): ... diff f a = if dx == dx' then error "Zero denom" else dydx where a' = addEpsilon a dx = a' `takeAway` a dx' = a `takeAway` a' dy = f a' `takeAway` f a dydx = dy `divide` dx
But this is just a finite-difference derivative, which is generally accurate to... well, a lot less than an analytic derivative. e.g try computing diff cos 1e-30 you'll get a garbage answer, while AD or symbolic differentiation will give you the correct answer, 1e-30. So for derivatives you actually intend to use, it's much better to use AD or symbolic differentiation, or just compute the derivatives by hand. Anything but finite difference (except at a carefully examined check for better derivatives). -- David Roundy Department of Physics Oregon State University