【问题标题】:Interpolation on 4D data4D 数据插值
【发布时间】:2017-12-25 22:24:41
【问题描述】:

我正在尝试对 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

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

  1. 我试图猜测输入 = 19 时 a、b 和 c 的值?有什么指点吗?
  2. 在这种情况下如何估计拟合优度?

【问题讨论】:

    标签: matlab interpolation curve-fitting


    【解决方案1】:

    这不是 4D 插值,这是 1D 插值的 3 倍。您只需插入 interp1([0 35],[-0.1253 -0.0985],19)bc。 (interp1(intput,a,19))

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

    另请注意,一维插值使用 2 个“维度”。因为你用一个来引导插值,所以另一个是插值的。一般来说,对于[v,a,b,c] 数据,您将使用 3D 插值。

    说了这么多,在这种情况下,你确实不适合。您有分散的数据,而不是网格,因此问题变得相当复杂。

    如果您可以生成更多点(不一定是 16 个),您可以使用函数 griddatan 对分散数据进行插值。请注意,您不能只说“给我[a,b,c] for input=19,可能有无限数量的a,b,cs 具有这种条件。无论如何,您总是需要给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

    【讨论】:

    • 谢谢你这么好的解释。但是,如果 a、b 和 c 在某种程度上相互依赖,您认为这种方法是否也有效?例如。如果系数 (a, b 和 c) 是某个多项式函数的幂 ax^1 + bx^2+c*x^3?
    • @user29337 不,这就是我在答案中添加第二段的原因。
    • 绝妙的概念;我没有以这种概念性的方式看到这个问题。谢谢你。生成 16 点数据对我来说不是问题。假设如果我有 16 个样本,那么我该如何继续获得“func”的通用模型?
    • @user29337 我想你可能在这里有XY problem。你的目标是什么?插入 4D 数据,还是创建适合您数据的模型?模型拟合和插值是不同的技术。
    • 对不起。我正在寻找插值。
    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2012-12-16
    • 2021-09-25
    • 2013-07-24
    相关资源
    最近更新 更多