一般来说:给定一组本身是单调的任意数据集,我应该如何计算额外的n个点来强制非单调三次插值(我必须使用,别无选择)是单调的?
特别适合我:我有一个项目需要计算两个伺服器之间的关系。 由于机器设计,伺服系统不应备份。 我希望我能发布一张图片,但我刚刚注册,还没有声誉。 具有代表性的要点如下:
0: [0, 0](直线到 1)
1: [37.5, 45](立方曲线为 2)
2: [?, ?] (三次曲线到 3)
3: [180, 60](立方曲线至4)
4: [?, ?] (三次曲线为 5)
5: [322.5, 75](直线到6)
6: [360, 120] (不适用)
我想要的行为以点 0、1、3、5 和 6 为特征。 点 0 是固定的;其余的在运行时计算,并保证单调增加。 整个图保证围绕点 3 对称。 需要添加第 2 点和第 4 点,以便我必须使用的第三方线性/三次插值器产生尽可能平滑的单调曲线。 (最小二阶导数)
有人知道该怎么做吗?
为了节省时间,我自己推导出了一个解决方案:
-
将图转换为围绕原点对称的图。 (第 3 点变为 [0, 0])
-
求抛物线段(恒定加速度),该段使点 1 处的斜率在 [x, 0] 处趋于平坦。
如果 x 与点 1 具有相同的符号,则点 2 = [x, 0], 点 4 = [-x, 0],并且中间的段应该是线性的。
如果 x 具有相反的符号或为零,则默认插值已经是单调的。 无需额外积分。
确定抛物线段后,无论哪种情况,每条边再添加一个点以将它们转换为三次线段。 (恒定加速度到斜坡加速度)