[Edu-sig] Re: More on intro to Python (today's 3 hr training)
Kirby Urner
urnerk at qwest.net
Tue Mar 29 17:05:00 CEST 2005
> Sorry for being picky, but while your derivative factory
> function follows the mathematical definition, it is not the
> "best" way to do it numerically. The preferred way is:
>
> def derivative(f):
> """
> Factory function: accepts a function, returns a closure
> """
> def df(x, h=1e-8):
> return (f(x + h/2) - f(x - h/2))/h
> return df
>
> This is best seen by doing a graph (say a parabola) and drawing
> the derivative with a large "h" using both methods near a local
> minimum.
>
> André
Hey good to know André and thanks for being picky.
Fresh from yesterday's example, I posted something about *integration* to a
community college math teacher list last night, which I think is maybe
closer to your better way (which I hadn't seen yet).
===
def integrate(f,a,b,h=1e-3):
"""
Definite integral with discrete h
Accepts whatever function f,
runs x from a to b using increments h
"""
x = a
sum = 0
while x <= b:
sum += h*(f(x-h)+f(x+h))/2.0 # average f(x)*h
x += h
return sum
>>> def g(x): return pow(x,2) # so this is what we want to investigate
>>> integrate(g,0,3,h=1e-4) # h = 0.0001, close to 9
8.9995500350040558
>>> integrate(f,0,3,h=1e-6) # h = 0.000001, even closer to 9
8.9999954998916039
def defintegral(intexp, a, b):
return intexp(b) - intexp(a)
>>> def intg(x): return (1./3)*pow(x,3) # limit function
>>> defintegral(intg, 0, 3) # exactly 9
9.0
===
The post (which includes the above but is longer) hasn't showed up in the
Math Forum archives yet, or I'd add a link for the record. Maybe later.
Kirby
More information about the Edu-sig
mailing list