scipy.interpolate.
sproot#
- scipy.interpolate.sproot(tck, mest=10)[源代码]#
找到三次 B 样条的根。
给定三次 B 样条的结点 (>= 8) 和系数,返回样条的根。
- 参数:
- tck元组或一个 B 样条对象
如果是元组,它应为长度为 3 的序列,包含结点向量、B 样条系数和样条的阶。结点数量必须 >= 8,阶必须为 3。结点必须是一个单调递增序列。
- mestint,可选
零的数量估计 (默认为 10)。
- 返回:
- zerosndarray
给出样条根的数组。
注意
不建议直接操作 tck 元组。在新代码中,建议使用
BSpline
对象。参考
[1]C. de Boor,“关于使用 b 样条进行计算”,逼近理论杂志,第 6 卷,第 50-62 页,1972 年。
[2]M. G. Cox,“b 样条的数值评估”,应用数学研究所学报,第 10 卷,第 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.])
更多示例在 教程 中提供。