2

我需要从二维数据数组构造一个插值函数。我需要返回实际函数的原因是,我需要能够将函数作为表达式的一部分进行评估,我需要进行数值积分。

出于这个原因,“interp2”并没有削减它:它不返回一个函数。

我可以使用“TriScatteredInterp”,但这是重量级的:我的网格是等距的(而且很大);所以我不需要德劳内三角化。

有没有其他选择?

4

3 回答 3

5

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

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

当然,这需要对底层函数的形式有所了解,但你的问题是不清楚你是否有这种信息。

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

这样做的方法是:

  1. 定义一个包含输入数据的 x 和 y 域的 2D Universe
  2. 创建此 Universe 的 2D 模糊分区 - 选择可提供所需精度的分区大小
  3. 使用输入数据应用离散 F 变换以在 3D 模糊空间中生成模糊数据点
  4. 将逆 F 变换作为函数句柄(连同模糊数据点)传递给您的积分函数

如果您不熟悉 F 变换,那么我不久前发布了一篇关于如何将 F 变换用作一维情况下的通用逼近器的博客:http: //iainism-blogism.blogspot.co.uk /2012/01/fuzzy-wuzzy-was.html

为了了解该方法背后的数学原理并将其扩展到多维案例,俄斯特拉维亚大学发表了一篇博士论文,解释了其在各种工程问题中的应用,并提供了一个如何构建二维宇宙案例的示例:http://irafm.osu.cz/f/PhD_theses/Stepnicka.pdf

于 2012-10-26T11:53:13.220 回答
3

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

于 2012-12-12T15:13:30.223 回答
0

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

在您使用该工具(它也有一个 GUI)创建您的拟合后,它将生成一个sftool对象,然后您可以使用它集成到(2-D)中quad2d

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

这是我第一次做这样的事情,所以我使用数值计算的线积分来确认它。根据斯托克定理,面积分和线积分应该是一样的,结果是一样的。

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

于 2012-07-02T22:15:07.313 回答