4D数据的插值

时间:2017-07-20 09:42:08

标签: matlab interpolation curve-fitting

我试图在4D数据上执行插值/拟合(最好是非线性的,但线性也应该没问题)。我的数据有以下形式:

[a,b,c] = func(input)

显然,func未知,最终数据看起来像(输入,a,b,c):

0 -0.1253   0.0341  0.01060

35 -0.0985  0.0176  0.02060

50 -0.0315  -0.0533 0.1118

60 -0.0518  -0.0327 0.03020

80 0.2939   -0.0713 0.05670

100 0.3684  -0.0765 0.06740

我在例如输入= [0,35,50,60,80,100](0表示最小值,100表示​​最大值;我在最小值和最大值之间取6个样本)然后我得到相应的a,b和c值(我理解6样本点是一个糟糕的实验设计,所以我将来会扩展它。

  1. 我想在输入= 19时猜测a,b和c的值?有什么指针吗?
  2. 如何估计这种情况下的适合度?

1 个答案:

答案 0 :(得分:1)

这不是4D插值,这是1D插值的3倍。您只需为interp1([0 35],[-0.1253 -0.0985],19)b插入c和相同内容。 (interp1(intput,a,19)

请注意,对于网格中最基本的1D插值 (不是您拥有的),通常需要2个数据点。对于最基本的2D插值,您需要4个数据点。对于3D插值,8最小值,4D,16 ....(通常为2 ^ d)。

另请注意,1D插值使用2" dims"。因为您使用一个来指导插值,所以另一个是插值的。一般情况下,使用[v,a,b,c]数据,您将使用3D插值。

所有这一切,在这种情况下,你确实是nto。你有分散的数据,而不是网格,因此问题变得相当复杂。

如果您可以生成多个点(不一定是16个),则可以使用函数griddatan来插入散乱数据。请注意,您不能只为[a,b,c]说出input=19,可能会有无限量的a,b,c具有该条件。在任何情况下,您总是需要提供dim-1个样本点,并获取最后一个插值。只是一个建议:这个函数在计算和内存方面非常昂贵。不要用于大数据点,因为它会导致PC崩溃。

如果您想要找到一组使input=19生成的参数,那么您将进入更复杂的区域。您希望最小化函数f(x),其中x=[a,b,c]f(x)=input

用数学术语来说:

argmin_x |f(x)-input|^2= \vec{input}

这是一个更难的问题,可以说是数学而不是编程问题。也许ND bspline拟合您的数据将是一个很好的f