什么数学方法适用于插值2d到2d的函数?

时间:2011-10-16 23:21:15

标签: math interpolation

所以我们有一个类似

的矩阵
12,32
24,12
...

长度为2xN,另一个

44,32
44,19
...

长度为2xN,并且有一些函数f(x,y)返回z [1],z [2]。我们给出的2个矩阵代表x,y和z [1],z [2]的已知值对。什么是在这种情况下有用的插值公式?

1 个答案:

答案 0 :(得分:4)

如果您针对一个返回值解决问题,则可以通过插值找到两个函数f_1(x,y)f_2(x,y),并将函数组合为f(x, y) = [f_1(x,y), f_2(x,y)]。只需选择任何方法来解决适合您问题的插值函数。

对于二维的实际插值问题,有很多方法可以解决这个问题。如果您需要简单,您可以使用线性插值。如果您对分段函数没问题,可以选择贝塞尔曲线或样条曲线。或者,如果数据是统一的,你可以通过一个简单的多项式插值(嗯,在2D时不是很简单,但很容易)。


编辑:更多信息和一些链接。

使用Bilinear interpolation (wikipedia)可以实现分段解决方案。

对于多项式插值,如果数据在网格上,则可以使用以下算法(我找不到它的参考,它来自内存)。

如果数据点位于k l网格上,请按如下方式重写多项式:

f(x,y) = cx_1(x)*y^(k-1) + cx_2(x)*y^(k-2) + ... + cx_k(x)

这里,每个系数cx_i(x)也是度l的多项式。第一步是通过插入网格的每一行或每列来查找度k的{​​{1}}多项式。完成此操作后,您将l系数集(或者换句话说,l多项式)作为l多项式的插值点,cx_i(x),{{1} },...,cx_i(x0)(给你总共l * k分)。现在,您可以使用上述常量确定这些多项式作为插值点,从而为您提供结果cx_i(x1)

相同的方法用于贝塞尔曲线或样条曲线。唯一的区别是您使用控制点而不是多项式系数。首先得到一组将生成数据点的样条线,然后插入这些中间曲线的控制点以获得曲面曲线的控制点。


让我举一个例子来澄清上述算法。我们有以下数据点:

cx_i(xl)

我们首先拟合两个多项式:一个用于数据点(0,0)和(0,1),另一个用于(1,0)和(1,1):

f(x,y)

现在,我们在另一个方向插值来确定系数。当我们垂直读取这些多项式系数时,我们需要两个多项式。一个在0和1处评估为1;另一个在0处评估为1,在1处评估为3:

0,0 => 1
0,1 => 2
1,0 => 3
1,1 => 4

如果我们将这些结合到f_0(x) = x + 1 f_1(x) = x + 3 中,我们会得到:

cy_1(y) = 1
cy_2(y) = 2*y + 1