PCHIP (Piecewise Cubic Hermite Interpolating Polynomial) spline interpolation of arbitrarily spaced one-dimensional data in Julia. This package is a fork of SimplePCHIP with some extra features.
PCHIP interpolation preserves monotonicity (i.e., it will not over- or undershoot monotonic data points). See this SciPy documentation page for more details.
using PCHIPInterpolation
You will be prompted to install the package if you do not already have it.
xs = [0.0, 1.2, 2.0, 5.0, 10.0, 11.0]
ys = [2.0, 2.1, 1.0, 0.0, 0.0, 3.0]
itp = Interpolator(xs, ys)
The xs
and ys
inputs to the Interpolator
can be of any subtype of AbstractVector
, including the default Julia Vector
(as in the example), custom vector types from other packages, and ranges (e.g., 1:2:5
).
y = itp(1.5) # At a single point
ys = itp.(xs) # At multiple points
Plot (with Plots)
using Plots
plot(itp, markers=true, label="PCHIP")
The monotonicity-preserving property of PCHIP interpolation can be clearly seen in the plot.
integral = integrate(itp, 1, 3) # Integral between 1 and 3
Compute a derivative (with ForwardDiff)
using ForwardDiff
dydx = ForwardDiff.derivative(itp, 1.5)
A different Interpolator
constructor also exists that takes the derivative values at the interpolation points as a third argument. This method will create a generic cubic Hermite spline, which will not preserve monotonicity in general.