【问题标题】:What derivatives are used for splines in SciPy.interpolate.interp1d?SciPy.interpolate.interp1d 中的样条曲线使用了哪些导数?
【发布时间】:2017-12-20 09:35:20
【问题描述】:
我试图找出scipy.interpolate.interp1d 中的样条插值如何决定拟合/平滑函数的导数应该是什么。从documentation,我了解到如果int(或quadratic 或cubic)被传递给kind 关键字,interp1d 适合样条曲线。
但如果我不提供任何衍生信息,它如何确定衍生信息是什么?我试图跟踪源代码中的函数调用,但这只会让我进入神秘的spleval 函数,它似乎只是调用了 FITPACK。而且我不太确定如何从their website 找到有关 FITPACK 的信息...
【问题讨论】:
-
我误解了你的问题......很难找到一个确切的解释,但我把钱放在端点的零衍生品上,所有其他人都决心确保衍生品的连续性。请参阅wikipedia 中的示例。
标签:
python
scipy
interpolation
spline
【解决方案1】:
节点处的样条导数没有明确规定,它们由continuity/smoothness conditions 确定。我将以立方体为例。你给出 n 个 x 值和 n 个 y 值。三次样条具有 4*(n-1) 个系数,在给定 x 值之间的每个 (n-1) 个间隔上都有 4 个。这些系数由以下条件确定:
- 样条在每个内部节点处必须是连续的:这是 (n-2) 个方程,因为有 (n-2) 个内部节点。我们希望结的左右两部分在结处具有相同的值。
- 样条的一阶导数在每个内部节点处必须是连续的:这是 (n-2) 个方程。
- 样条的二阶导数在每个内部节点处必须是连续的:这是 (n-2) 个方程。
- 样条必须匹配每个给定的 y 值:这是 n 个方程。
到目前为止,对于 4*n-4 个未知数,总共有 4*n-6 个方程。需要两个额外的方程;最流行的选择是要求三阶导数在最左边和最右边的内部结处是连续的(这称为“非结”条件)。现在我们有一个大小为 4*n-4 的线性系统,可以求解系数。
上述内容不应与Hermite interpolation 混淆,Hermite interpolation 规定了导数以及函数本身的值。这是一个不太常见的任务,据我所知,SciPy 没有内置工具。