В комментариях к моему предыдущему вопросу было предложено извлечь все данные из InterpolatingFunction
, сгенерированные Mathematica 5.2, а затем создать еще один в Mathematica 8.Предлагаемый подход заключается в использовании функций, определенных в пакете DifferentialEquations`InterpolatingFunctionAnatomy`
, для извлечения данных из InterpolatingFunction
. Попробовав наивно,
Needs["DifferentialEquations`InterpolatingFunctionAnatomy`"]
ifun = First[
x /. NDSolve[{x'[t] == Exp[x[t]] - x[t], x[0] == 1},
x, {t, 0, 10}]];
data = Transpose@{InterpolatingFunctionGrid[ifun],
InterpolatingFunctionValuesOnGrid[ifun]};
interpolationOrder =
Developer`FromPackedArray@
InterpolatingFunctionInterpolationOrder[ifun];
ifun2 = Interpolation[data, InterpolationOrder -> interpolationOrder];
Table[ifun[x] - ifun2[x], {x, 0, 0.5160191740198963`, .1}]
я получаю существенную разницу между исходной функцией и восстановленной:
{0., 2.13061*10^-7, 2.05087*10^-7, 2.46198*10^-7, 6.68937*10^-7,
1.5624*10^-7}
Глядя на InputForm
этих функций, видно, что они не идентичны. Можно ли восстановить InterpolatingFunction
путем извлечения из нее всех данных и вызова Interpolation
для извлеченных данных?