pwtools.num.Spline¶
- class pwtools.num.Spline(x, y, eps=1e-10, checkeps=True, **splrep_kwargs)[source]¶
Bases:
Fit1D
Fit1D
-based spline interpolator.Like
scipy.interpolate.UnivariateSpline
, this is a wrapper aroundscipy.interpolate.splrep/splev
with some nice features like y->x lookup and interpolation accuracy check etc. It basically simplifies setting up a spline interpolation and holds x-y data plus the spline knots (self.tck
) together in one place. You can work with the methods here, but you can also use the normal tck (self.tck
) inscipy.interpolate.splev()
etc.Examples
>>> from scipy.interpolate import splev >>> from pwtools import num >>> x = linspace(0,10,100) >>> y = sin(x) >>> sp = num.Spline(x,y) >>> plot(x,y) >>> plot(x, sp(x)) >>> plot(x, splev(x, sp.tck)) # the same >>> plot(x, sp(x, der=1), label='1st derivative') >>> xx = sp.invsplev(0.5, xab=[0, pi/2]) >>> print("at %f degrees, sin(x) = 0.5" %(xx/pi*180)) >>> >>> y = x**2 - 5 >>> sp = num.Spline(x,y) >>> print("the root is at x=%f" %sp.invsplev(0.0)) >>> legend()
- __init__(x, y, eps=1e-10, checkeps=True, **splrep_kwargs)[source]¶
- Parameters:
x (numpy 1d arrays)
y (numpy 1d arrays)
eps (float) – Accuracy threshold. Spline must interpolate points with an error less then eps. Useless if you use splrep(…,s=..) with “s” (the smoothing factor) much bigger than 0. See ckeckeps.
checkeps (bool) – Whether to use eps to ckeck interpolation accuracy.
**splrep_kwargs (keywords args to splrep(), default: k=3, s=0)
Methods
get_max
([x0, xab])Convenience method.
get_min
([x0, xab])Return x where y(x) = min(y) by calculating the root of the fit's 1st derivative (by calling
self(x, der=1)
).get_root
([x0, xab])Return x where y(x) = 0 by calculating the root of the fit function.
invsplev
(y0[, x0, xab])Lookup x for a given y, i.e. "inverse spline evaluation", hence the name.
is_mono
()Return True if the curve described by the fit function f(x) is monotonic.
splev
(x, *args, **kwds)