Этот список представляет собой простую функцию, которая отображает точку 2D на число, если
каждый {{x,y},z}
вы считаете f[x,y]=z
{
{{1,3},9}, {{1,4},16},
{{2,4},8}, {{2,5},10}
}
Теперь я хочу функцию, которая интерполирует / экстраполирует f[x,y]
для любого {x,y}
.
Mathematica отказывается это делать:
Interpolation[{{{1,3},9}, {{1,4},16},{{2,4},8}, {{2,5},10}},
InterpolationOrder->1]
Интерполяция :: indim:
координаты не лежат на структурированной
тензорное произведение сетки.
Я понимаю, почему (Mathematica хочет "прямоугольный" домен), но
Какой самый простой способ заставить Mathematica создать интерполяцию?
Это не работает:
f[1,3]=9; f[1,4]=16; f[2,4]=8; f[2,5]=10;
g=FunctionInterpolation[f[x,y],{x,1,2},{y,3,5}]
FunctionInterpolation :: nreal:
16 Рядом с {x, y} = {1, -}, функция не
оценить до реального числа.
5 FunctionInterpolation :: nreal:
17 Рядом с {x, y} = {1, -}, функция не
оценить до реального числа.
5 FunctionInterpolation :: nreal:
18 Рядом с {x, y} = {1, -}, функция не
оценить до реального числа.
5 General :: stop: дальнейший вывод
FunctionInterpolation :: nreal
будет подавлено во время этого расчета.
Даже если вы игнорируете приведенные выше предупреждения, оценка g дает ошибки
g[1.5,4] // FortranForm
f(1.5,4) + 0.*(-9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 0.10000000000000009*
- (9.999999999999991*
- (9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))) +
- 0.5000000000000006*
- (-10.000000000000014*
- (-3.333333333333333*(f(1.3,4) - f(1.6,4)) -
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))) -
- 9.999999999999991*
- (9.999999999999991*(f(1.4,4) - f(1.5,4)) +
- 4.999999999999996*(-f(1.4,4) + f(1.6,4))))))
Другая «очевидная» идея (интерполяция интерполирующих функций
сами) тоже не работает.