插值建议(线性,立方?)

问题描述 投票:4回答:3

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

ActualSituation

(来源:ning.com

我的第一个方法是选择中点,但这显然是一个可怕的解决方案:

Midpoint

(来源:ning.com

我现在正在使用线性插值,它给出了一个合理的结果,但基本功能实际上永远不会是线性的。因此,只有当我的步长足够小时,这才有效:

LinearInterpolation

(来源:ning.com

对基本函数进行采样可能非常昂贵,但是为了获得更好的近似值,添加一个或两个额外的样本是我想要尝试的。可以在这里使用立方插值吗?像这样:

CubicInterpolation (来源:ning.com

还是有更好的方法?

大卫拉滕非常感激不尽

PS。我正在用C#编写,但这是一个与语言无关的问题。

interpolation linear approximation cubic
3个回答
3
投票

你的最后一张图只显示了三个点,这只能定义二次多项式,而不是立方。对于三次插值,您需要四个点。三次多项式可以以不同的方式拟合;这是两个。

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

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

顺便说一句,任何高阶多项式都可能是一个坏主意,因为它们在存在甚至一点点输入噪声的情况下往往变得非常不稳定。

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

更新:愚蠢的我留下了一个句子,指的是两种方式而不打字。现在输入它们。


2
投票

我的数学非常生疏,但你可能会发现Newton Raphson method给你带来了很好的效果。一般来说,假设迭代开始“足够接近”所需的根,它会非常快速地收敛到准确的解。


2
投票

神奇的词是“根解算器”;数学根是函数等于零的值。通过添加/减去阈值,您可以使用根查找器。

如果您知道要插入的函数,可以设置一个非常快速的根查找程序。如果您没有帖子建议的线索(“未定义”),最好的方法是“布伦特方法”,“割线方法”和“二分法”的组合,或单独的“割线方法”。维基百科有一个这种方法的条目。

与您的观点相反,使用更复杂的功能并不是一个好主意。主要的性能障碍是功能评估,其随着更多点/获得导数或更复杂的插值函数而增加。

如果你接近最大/最小/拐点,Newton-Raphson方法是非常糟糕的,因为接近零的导数会让你远离该点并且还存在一些其他问题。在你知道自己在做什么之前不要使用它。

© www.soinside.com 2019 - 2024. All rights reserved.