scipy.interpolate.
sproot#
- scipy.interpolate.sproot(tck, mest=10)[源代码]#
查找三次 B 样条的根。
旧版
此函数被认为是旧版,将不再接收更新。虽然我们目前没有计划删除它,但我们建议新代码使用更现代的替代方案。具体来说,我们建议构造一个
BSpline
对象并使用以下模式:PPoly.from_spline(spl).roots()。给定三次 B 样条的节点(>=8)和系数,返回样条的根。
- 参数:
- tck元组或 BSpline 对象
如果是一个元组,那么它应该是一个长度为 3 的序列,包含节点向量、B 样条系数和样条的次数。节点的数量必须 >= 8,次数必须为 3。节点必须是一个单调递增的序列。
- mestint,可选
对零点数量的估计(默认为 10)。
- 返回:
- zerosndarray
一个给出样条根的数组。
注意
不建议直接操作 tck 元组。在新代码中,首选使用
BSpline
对象。参考文献
[1]C. de Boor, “关于使用 b 样条进行计算”, J. Approximation Theory, 6, p.50-62, 1972.
[2]M. G. Cox, “b 样条的数值评估”, J. Inst. Maths Applics, 10, p.134-149, 1972.
[3]P. Dierckx, “使用样条的曲线和曲面拟合”, 数值分析专著, 牛津大学出版社, 1993.
示例
对于某些数据,此方法可能会错过一个根。当其中一个样条节点(FITPACK 自动放置)恰好与真正的根重合时,就会发生这种情况。一种解决方法是转换为
PPoly
,它使用不同的求根算法。例如,
>>> x = [1.96, 1.97, 1.98, 1.99, 2.00, 2.01, 2.02, 2.03, 2.04, 2.05] >>> y = [-6.365470e-03, -4.790580e-03, -3.204320e-03, -1.607270e-03, ... 4.440892e-16, 1.616930e-03, 3.243000e-03, 4.877670e-03, ... 6.520430e-03, 8.170770e-03] >>> from scipy.interpolate import splrep, sproot, PPoly >>> tck = splrep(x, y, s=0) >>> sproot(tck) array([], dtype=float64)
转换为 PPoly 对象确实找到了
x=2
的根>>> ppoly = PPoly.from_spline(tck) >>> ppoly.roots(extrapolate=False) array([2.])
更多示例请参见教程。