Matlab中2D插值的功能形式

时间:2012-07-02 21:01:29

标签: matlab interpolation

我需要从2D数据阵列构造插值函数。我需要返回实际函数的原因是,我需要能够将函数作为表达式的一部分进行评估,我需要对其进行数值积分。

因此,“interp2”不会削减它:它不会返回一个函数。

我可以使用“TriScatteredInterp”,但这很重:我的网格间距相等(大);所以我不需要delaunay三角化。

还有其他选择吗?

3 个答案:

答案 0 :(得分:5)

(对“迟到”答案表示道歉,但如果现有答案对他们没有帮助,我会提出一些可能对他人有帮助的建议)

从您的问题中不清楚所产生的函数需要多准确(或者有多大,'大'),但您可以采用的一种方法是使用最小二乘法或者使用最小二乘法回归数据点基于卡尔曼滤波器的方法。您需要使用多个候选函数表单执行此操作,然后选择“最佳”表单,例如使用MAE或MSE等度量。

当然,这需要了解基础功能的形式可能是什么,但是你的问题并不清楚你是否有这种信息。

另一种可行的方法(并且不需要知道底层函数可能是什么)是使用模糊变换(F变换)生成线段,为表面提供局部近似。

方法是:

  1. 定义包含输入数据的x和y域的2D Universe
  2. 创建此Universe的2D模糊分区 - 选择能够提供所需精度的分区大小
  3. 使用输入数据应用离散F变换以在3D模糊空间中生成模糊数据点
  4. 将逆F变换作为函数句柄(以及模糊数据点)传递给集成函数
  5. 如果您不熟悉F变换,那么我前一段时间发布了一篇关于如何在一维情况下将F变换用作通用逼近器的博客:http://iainism-blogism.blogspot.co.uk/2012/01/fuzzy-wuzzy-was.html

    为了查看该方法背后的数学并将其扩展到多维案例,那么奥斯特拉维亚大学已经发表了一篇博士论文,解释了它在各种工程问题中的应用,并提供了一个如何构建一个案例的例子。 2D宇宙:http://irafm.osu.cz/f/PhD_theses/Stepnicka.pdf

答案 1 :(得分:3)

如果你想要一个函数句柄,为什么不定义f = @(xi,yi)interp2(X,Y,Z,xi,yi)? 它可能有点慢,但我认为它应该有效。

答案 2 :(得分:0)

如果我理解正确,您想要执行二维数据的曲面/线积分。有办法做到但可能不是你想要的方式。我有完全相同的问题,这很烦人!我解决它的唯一方法是使用Surface Fitting Tool (sftool)创建一个 surface 然后集成它。

使用该工具创建拟合后(它还具有GUI),它将生成一个sftool对象,然后您可以使用quad2d

我也尝试了使用interp2的方法并获得了结果(类似于sfobject),但我不知道如何使用数据进行数值积分(线/曲面) 。创建sfobject然后集成它要快得多。

这是我第一次做这样的事情,所以我用数字评估的线积分确认了它。根据斯托克定理,表面积分和线积分应该相同,结果确实相同。

我在数学堆栈交换中询问this问题,想要做二维数据的线积分,最后做一个曲面积分然后用线积分确认答案!