【发布时间】:2010-07-14 02:23:12
【问题描述】:
这个列表是一个将二维点映射到数字的简单函数,如果
您将每个{{x,y},z} 视为f[x,y]=z
{
{{1,3},9}, {{1,4},16},
{{2,4},8}, {{2,5},10}
}
我现在想要一个函数,可以为任何 {x,y} 插入/外推 f[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: 的进一步输出 函数插值::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))))))
另一个“明显”的想法(插值插值函数 他们自己)也不起作用。
【问题讨论】:
标签: wolfram-mathematica interpolation