Index
DataInteprolationsND.jl is a library for interpolating arbitrarily high dimensional array data. The domain of this interpolation is a (hyper)rectangle. Support is included for efficient evaluation at multiple points in the domain through KernelAbstractions.jl.
For one dimensional interpolation see also DataInterpolations.jl.
API
An NDInterpolation is defined by a tuple of interpolation dimensions and the data u to interpolate.
using DataInterpolationsND
t1 = cumsum(rand(5))
t2 = cumsum(rand(7))
interpolation_dimensions = (
LinearInterpolationDimension(t1),
LinearInterpolationDimension(t2)
)
# The outputs will be vectors of length 2
u = rand(5, 7, 2)
interp = NDInterpolation(u, interpolation_dimensions)Evaluation of this vector valued interpolation can be done in place or out of place.
interp(0.5, 0.5)
out = zeros(2)
interp(out, 0.5, 0.5)If we provide t_eval for the interpolation dimensions, we can evaluate at these points either 'zipped' (where all t_eval must be of the same length) or as a grid defined by the Cartesian product of the t_eval.
interpolation_dimensions = (
LinearInterpolationDimension(t1; t_eval = range(first(t1), last(t1); length = 100)),
LinearInterpolationDimension(t2; t_eval = range(first(t2), last(t2); length = 100))
)
interp = NDInterpolation(u, interpolation_dimensions)
# Out of place zipped evaluation
eval_unstructured(interp) # Yields Matrix of size (100, 2)
# In place grid evaluation
out = zeros(100, 100, 2)
eval_grid!(out, interp)This is particularly efficient for evaluating the interpolation for the same t_eval multiple times with different values for u, because the indices (and basis functions if applicable) for the t_eval are cached during the interpolation dimension construction.
Available interpolations
The interpolation types are given by the corresponding interpolation dimension type.
LinearInterpolationDimension(t): Linear interpolation in the sense of bilinear, trilinear interpolation etc.ConstantInterpolationDimension(t): An interpolation with a constant value in each interval betweentpoints. The Boolean optionleft(defaulttrue) can be used to indicate which side of the interval in which the input lies determines the output value.BSplineInterpolationDimension(t, degree): Interpolation using BSpline basis functions. The input valuestare interpreted as knots, and optionally knot multiplicities can be supplied. Per dimension a degree can be specified. Note that for anNDInterpolationof this type, the size ofufor a certain dimension is equal tosum(multiplicities) - degree - 1. This interpolation dimension type can also be used to define NURBS, by passingcache = NURBSWeights(weights)to theNDInterpolationconstructor.