插值建议(线性,三次?)

Dav*_*ten 5 approximation cubic linear-interpolation

我需要找到未定义函数与阈值相交的点的近似值。我正在逐步穿越空间,每当发现随后的两个步骤位于阈值的不同侧时,我会在两者之间添加一个点:

实际情况

(来源:ning.com

我的第一种方法是选择中间点,但这显然是一个糟糕的解决方案:

中点

(来源:ning.com

我现在使用的是线性插值,可以得出合理的结果,但是底层函数实际上永远不会是线性的。因此,这仅在我的步长足够小时才有效:

线性插值

(来源:ning.com

对基本函数进行采样可能会非常昂贵,但是我想尝试添加一个或两个其他采样以获得更好的近似值。这里可以使用三次插值吗?像这样:

三次插值
(来源:ning.com

还是有更好的方法?

David Rutten非常有义务

ps。我正在用C#编写,但这是语言不可知的问题。

Tho*_*mas 2

您的最后一张图片仅显示三个点,仅足以定义二次多项式,而不是三次多项式。对于三次插值,您需要四个点。三次多项式可以用不同的方式拟合;这里有两个。

最直接的方法是简单地让(唯一)多项式通过所有四个点。

另一种方法是使用切线。同样,我们需要四点。让左边的两点定义一个斜率。让多项式通过第二个点(通常,它不会通过第一个点),并匹配该点计算的斜率。右侧第四点和第三点也是如此。

顺便说一句,任何高阶多项式都可能不是一个好主意,因为即使存在一点点输入噪声,它们也会变得非常不稳定。

如果您提供有关您的问题领域的更多详细信息,我也许可以给出更具体的答案。例如,您的数据点来自哪里,您通常可以期望什么样的曲线,以及如果需要的话您可以返回并采样更多吗?如果需要的话,我也可以提供方程和伪代码。

更新:愚蠢的我留下了一句话,提到了两种方式,但没有把它们打出来。现在把它们打出来。

  • 根据每次电荷的影响范围以及您所需的准确度,您也许可以使用“吐痰”技术。在所有点(像素)处构建一个场强的大型二维数组,然后将电荷一一相加,而不是迭代整个数组,而仅迭代电荷影响大于某个 epsilon 的(圆形)区域。 (2认同)