Extrapolation behavior
1. Simple extrapolation
Extrapolation in Interpolations.jl
takes several forms. The simplest, is when the extrapolation behavior can be described with the following pseudo-code:
if (the coordinate is outside the domain) then
do something that is
* well defined without looking at the data set
* decides the outcome (error/return value) of the indexing operation
end
proceed to inbounds interpolation
An example of this interpolation behavior is ExtrapError
, which simply throws a bounds error if the coordinate is outside the domain. Interpolations.jl
could support, for example, the following variants:
ExtrapError
: Throws aBoundsError
, just likeGrid.jl
ExtrapNaN
: Returnsconvert(T, NaN)
, whereT
iseltype(data)
ExtrapNull
: Returns a value-lessNullabel{T}
2. Index transformation extrapolation
The next form is index transformation, which can be described as
if (the coordinate is outside the domain) then
calculate an index that is inside the domain, which gives
the extrapolated value
end
proceed to inbounds interpolation (using the transformed index)
An example here is ExtrapPeriodic
, which transforms the coordinate index to one which is inside the domain by means of modulo calculations. Another example is ExtrapConstant
, which clamps out-of-bounds coordinates to their nearest inbounds data point.
For some of these, extra care needs to be taken in higher dimensions, when deciding what happens in the "outside corners":
| | what happens here?
| |
----------+---------------+--------
| |
| the domain |
| |
----------+---------------+--------
| |
| | ...and here?