我正在尝试对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时进行观察,然后得到相应的a、b和c值(我知道6个样本点是一个糟糕的实验设计,因此我将在将来扩展它)。
发布于 2017-07-20 01:56:36
这不是4D插值,这是3乘以1D插值。您只需要对interp1([0 35],[-0.1253 -0.0985],19)
进行插值,对于b
和c
也是如此。(interp1(intput,a,19)
)
请注意,对于网格网格中最基本的一维插值(不是所拥有的),一般需要2个数据点。对于最基本的2D插值,您需要4个数据点。三维插值,最少8,4D,16.(一般为2^d)。
还请注意,一维插值使用2 "dims“。因为你用一个来引导插补,另一个是内插。一般情况下,对于[v,a,b,c]
数据,您将使用三维插值。
不管怎么说,在这种情况下,你是不可能的。您有分散的数据,而不是网格,因此问题变得更加复杂。
如果您可以生成更多的点(不一定是16点),您可以使用函数griddatan
来插值散乱的数据。请注意,您不能只说“给我[a,b,c]
for 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样条拟合会是一个很好的f
。
https://stackoverflow.com/questions/45211034
复制相似问题