* Added facility for smoothed approximating spline instead of "exact"

Wirawan Purwanto 11 years ago
parent 06fa307e84
commit c8aad2e2f8
  1. 28

@ -9,16 +9,26 @@ import numpy
import scipy.interpolate
class spline_2d:
"""Simple interpolation for two-dimensional curve.
Created to handle the quirks of current SciPy interpolation
"""Simple interpolation or smooth approximation
of a two-dimensional curve.
Input parameters:
- s: smoothing of the spline curve. The default is 0,
which means plain interpolation, no no extra smoothing.
If s > 0, then some smoothing is performed, and the
curve represents an approximation of the input x,y
- w: the weight factor for each data point.
# Important notes on spline CAVEATS:
# - for some reason we HAVE to make a copy of the 'x' array
# (to make it contiguous, probably?)
# - also, the x values better be sorted in ascending order, or else
# - the x values better be sorted in ascending order, or else
# the routine would return nonsense (i.e. NaN's).
def __init__(self, x, y):
# - no two same values of x can be specified.
def __init__(self, x, y, w=None, s=0):
self.s = s
self.w = w
def init(self, x, y):
# First, the x must be sorted, so we make a private copy of
@ -29,7 +39,7 @@ class spline_2d:
self.x = self.data['x']
self.y = self.data['y']
# Quirk 2: the x data for spline function must be contiguous
# See below in init_spline_params()
# (No, now this is handled by splrep() properly.)
#self.x_copy = self.x.copy()
@ -43,7 +53,7 @@ class spline_2d:
calling the first spline function if you want different, non-default
self.spline_params \
= scipy.interpolate.splrep(self.x, self.y, s=0)
= scipy.interpolate.splrep(self.x, self.y, w=self.w, s=self.s)
def spline(self, xnew):