
P1: JYS
c04 JWBK378-Fletcher May 23, 2009 4:21 Printer: Yet to come
Basic Mathematical Tools 29
if(x < -10): result = 0.0
else:
t = 1/(1 - a*x)
term = b9 + t*b10
term = b8 + t*term
term = b7 + t*term
term = b6 + t*term
term = b5 + t*term
term = b4 + t*term
term = b3 + t*term
term = b2 + t*term
term = b1 + t*term
term = term + -0.5*(x*x)
result = 0.5*t*math.exp(term)
return result
4.3 INTERPOLATION
Interpolation is the process of estimating the values of a function y(x) for arguments between
x
0
, ..., x
n
at which the values y
0
, ..., y
n
are known. To elegantly implement interpolation
schemes in a single dimension, it is helpful to first define some utility functions for searching
an ordered sequence of numbers. The ppf.utility.bound module defines a family of
such functions in the spirit of the C++ STL
2
functions of the same names.
import operator
def lower
bound(x, values, cmp=operator.lt):
"""Find the first position in values
where x could be inserted without violating
the ordering.
"""
first, count = 0, len(values)
while count > 0:
half = count/2
middle = first + half
if cmp(values[middle], x):
first = middle + 1
count = count - half - 1
else: count = half
return first
def upper
bound(x, values, cmp=operator.lt):
"""Find the last position in values
where x could be inserted without changing
the ordering.
2
The C++ STL (Standard Template Library) is a generic library of class templates and algorithms.