如何在三次样条实现中计算一组离散点的一阶导数?

How do I calculate the first derivative on a discrete set of points in cubic spline implementation?

我正在尝试实现三次样条插值。三次样条在数学上并不难理解,但我在理解术语 "Di" 时遇到了问题,如数学世界上的 fourth equation 所示。

Di是指从离散点集取当前点和下一个点(分别为y_i和y_i+1)计算的有限差分吗?

Di 只是点 y_i 处的三次样条的一阶导数向量。它可以通过多种方式计算,包括有限差分。 Catmull-Rom 样条是一种常用的样条,它从 y_(i-1) 和 y_(i+1) 推断 y_i 的一阶导数。

该 MathWorld 文档的第一部分(直到等式 9)简单地表明,如果您有 n 个点和 n 个一阶导数,则通过所有 n 个点的三次样条将被完全定义。请注意,此三次样条由 (n-1) 三次多项式组成,通常仅 C1 连续。

该文档的第二部分在 eq 之后。图 9 表明,您可以通过使三次多项式之间的二阶导数在所有内部点(即等式 13)相同来消除一阶导数的需要。但是,这样做会导致 (4n-2) 个方程有 4n 个未知数。因此,我们需要再添加两个条件。在第一个和最后一个点(eq 16、17)处的零二阶导数通常用于这两个条件,这也将导致所谓的自然三次样条。