我试图在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样本点是一个糟糕的实验设计,所以我将来会扩展它。
答案 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