Extrapolation
The call to extrapolate
defines what happens if you try to index into the interpolation object with coordinates outside of its bounds in any dimension. The implemented boundary conditions are Throw
, Flat
, Line
, Periodic
and Reflect
, or you can pass a constant to be used as a "fill" value returned for any out-of-bounds evaluation. Periodic
and Reflect
require that there is a method of Base.mod
that can handle the indices used.
Examples:
itp = interpolate(1:7, BSpline(Linear()))
etpf = extrapolate(itp, Flat()) # gives 1 on the left edge and 7 on the right edge
etp0 = extrapolate(itp, 0) # gives 0 everywhere outside [1,7]
Periodic extrapolation
For uniformly sampled periodic data, one can perform periodic extrapolation for all types of B-Spline interpolations. By using the Periodic(OnCell())
boundary condition in interpolate
, one does not need to include the periodic image of the starting sample point.
Examples:
f(x) = sin((x-3)*2pi/7 - 1)
A = Float64[f(x) for x in 1:7] # Does not include the periodic image
# Constant(Periodic())) is an alias for Constant{Nearest}(Periodic(OnCell()))
itp0 = interpolate(A, BSpline(Constant(Periodic())))
# Linear(Periodic())) is an alias for Linear(Periodic(OnCell()))
itp1 = interpolate(A, BSpline(Linear(Periodic())))
itp2 = interpolate(A, BSpline(Quadratic(Periodic(OnCell()))))
itp3 = interpolate(A, BSpline(Cubic(Periodic(OnCell()))))
etp0 = extrapolate(itp0, Periodic())
etp1 = extrapolate(itp1, Periodic())
etp2 = extrapolate(itp2, Periodic())
etp3 = extrapolate(itp3, Periodic())