[Tutor] Functional Derivatives

Chris Fuller cfuller084 at thinkingplanet.net
Tue Apr 21 07:38:58 CEST 2009

His problem was composing four functions, each with a small error.  The first 
two applications work well enough, but there is a about a percent error in 
the third composition.  The big source of error is f(x+h)-f(x).  Subtracting 
two floating point numbers that are nearly equal is a known source of 
innaccuracy.  Scaling all the terms by a very large number reduced the error, 
but not as well as fewer compositions.



def D5(func, h=1e-5):
    ""' Return derivative of function func'''
    def df(x):
        return (BIGNUM*func(x+h)-BIGNUM*func(x))/(BIGNUM*h)
    return df

import math

print D5(math.sin)(0.3)
print math.cos(0.3)

print D5(D5(math.sin))(0.3)
print -math.sin(0.3)

print D5(D5(D5(math.sin)))(0.3)
print -math.cos(0.3)

# actually, other powers, higher or lower, work less well..
BIGNUM = 1e10
print D5(D5(D5(math.sin)))(0.3)
print -math.cos(0.3)

More information about the Tutor mailing list