scipy.interpolate.

sproot#

scipy.interpolate.sproot(tck, mest=10)[原始碼]#

尋找三次 B 樣條的根。

舊版

此函數被視為舊版,將不再接收更新。雖然我們目前沒有移除它的計畫,但我們建議新程式碼改用更現代的替代方案。具體來說,我們建議建構一個 BSpline 物件,並使用以下模式:PPoly.from_spline(spl).roots()

給定三次 B 樣條的節點(>=8)和係數,傳回樣條的根。

參數:
tcktuple 或 BSpline 物件

如果是一個 tuple,則它應該是一個長度為 3 的序列,包含節點向量、B 樣條係數和樣條的次數。節點數量必須 >= 8,且次數必須為 3。節點必須是一個單調遞增的序列。

mestint,選用

零點數量的估計值(預設值為 10)。

回傳值:
zerosndarray

一個提供樣條根的陣列。

註解

不建議直接操作 tck-tuples。在新程式碼中,建議優先使用 BSpline 物件。

參考文獻

[1]

C. de Boor, “On calculating with b-splines”, J. Approximation Theory, 6, p.50-62, 1972.

[2]

M. G. Cox, “The numerical evaluation of b-splines”, J. Inst. Maths Applics, 10, p.134-149, 1972.

[3]

P. Dierckx, “Curve and surface fitting with splines”, Monographs on Numerical Analysis, Oxford University Press, 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.])

更多範例請參見教學文件