From inspection, some investigation and ruebenko's help, what I've found so far is that InterpolatingFunction
has the following underlying structure:
InterpolatingFunction[
domain, (* or min/max of grid for each dimension *)
List[
version, (* 3 in Mathematica 7, 4 from 8 onwards *)
bitField, (* 3 for exact/arbitrary precision
7 for machine numbers, 15 for machine complex,
39 for spline, 4259 for FEM elements. These are
for version 4, and are different for version 3.*)
dataDerivatives, (* Max order of derivatives supplied for input *)
domainGridSize, (* or input sample points in each dimension *)
interpolationOrder, (* actually, order + 1; for each dimension *)
nthDerivativeOfIntFun, (* Denotes if the current InterpolatingFunction is
an nth derivative of an existing Int. Func. and
0 otherwise. *)
periodicInterpolation, (* 0 for False and {1} for True *)
0, 0, (* One of the zeros is a permutation flag for
time-dependent InterpolatingFunction *)
Automatic (* Extrapolation handler *)
],
basicInterpolatingUnit, (* This is setup such that it agrees with the input
values at the input grid points. You might see
structures with Developer`PackedArrayForm for
2D Hermite, BSplineFunction for 2D Spline
NDSolve`FEM`ElementMesh for 3D, or nothing. *)
Automatic (* Unknown *)
]
You can access most of this internal data using the following arguments to any InterpolatingFunction
object:
{"Domain", "Coordinates", "Grid", "ValuesOnGrid", "InterpolationOrder", "DerivativeOrder"}
See the contents of the following package for more information on what exactly the above arguments return:
SystemOpen@FindFile["DifferentialEquations`InterpolatingFunctionAnatomy`"]