我的大胆主张是三次样条的 Octave 实现,与Wolfram 的 Mathworldinterp1(..., "spline")
中概述的“自然三次样条”算法不同。我已经编写了自己的后者实现,并将其与函数的输出进行了比较,结果如下:interp1(..., "spline")
我发现,当我尝试与 4 个点进行相同的比较时,解也不同,而且,Octave 解与将单个三次多项式拟合到所有四个点相同(实际上并没有为三个间隔生成分段样条) .
我还尝试深入了解 Octave 的样条曲线实现,发现它太迟钝,无法在 5 分钟内阅读和理解。
我知道在实现三次样条时可以选择一些边界条件选项(“自然”与“钳制”)。我的实现使用“自然”边界条件(其中两个外部点的二阶导数设置为零)。
如果Octave 的三次样条确实与标准三次样条不同,那么它到底是什么?
编辑:
上面的比较图中显示的两个解决方案的二阶差绘制在此处:
首先,在 Octave 的情况下似乎只有两个三次多项式:一个适合前两个区间,一个适合后两个区间。其次,它们显然没有使用“自然”样条曲线,因为极端的二阶导数不会趋于零。
此外,我认为我在中间(即第三个)点的实现的二阶差为零只是一个巧合,而不是算法所要求的。对一组不同的点重复此测试将确认/反驳这一点。