scipy.interpolate.

make_splrep#

scipy.interpolate.make_splrep(x, y, *, w=None, xb=None, xe=None, k=3, s=0, t=None, nest=None)[source]#

尋找一維函數的 B 樣條表示。

給定資料點集 (x[i], y[i]),在區間 xb <= x <= xe 上確定平滑的 k 次樣條近似。

參數:
x, yarray_like, shape (m,)

定義曲線 y = f(x) 的資料點。

warray_like, shape (m,), optional

嚴格正數的一維權重陣列,長度與 xy 相同。權重用於計算加權最小平方法樣條擬合。如果 y 值的誤差的標準差由向量 d 給定,則 w 應為 1/d。預設值為 np.ones(m)

xb, xefloat, optional

要擬合的區間。如果為 None,則預設值分別為 x[0]x[-1]

kint, optional

樣條擬合的次數。建議使用三次樣條,k=3,這是預設值。應避免使用 k 的偶數值,尤其是在 s 值較小時。

sfloat, optional

平滑條件。平滑量取決於滿足以下條件

sum((w * (g(x)  - y))**2 ) <= s

其中 g(x) 是對 (x, y) 的平滑擬合。使用者可以使用 s 來控制資料接近度和擬合平滑度之間的權衡。較大的 s 表示更多的平滑,而較小的 s 值表示較少的平滑。建議的 s 值取決於權重 w。如果權重代表 y 的標準差的倒數,則好的 s 值應在範圍 (m-sqrt(2*m), m+sqrt(2*m)) 內找到,其中 mxyw 中的資料點數量。預設值為 s = 0.0,即插值。

tarray_like, optional

樣條節點。如果為 None (預設值),節點將自動建構。必須至少有 2*k + 2 個節點,最多 m + k + 1 個節點。

nestint, optional

節點向量的目標長度。應介於 2*(k + 1) (次數為 k 的樣條的最小節點數) 和 m + k + 1 (內插樣條的節點數) 之間。此常式傳回的實際節點數可能略大於 nest。預設值為 None (無限制,最多新增 m + k + 1 個節點)。

傳回:
spla BSpline 實例

對於 s=0spl(x) == y。對於 s 的非零值,spl 表示 (x, y) 的平滑近似,通常節點較少。

另請參閱

generate_knots

在底層用於產生節點

make_splprep

此常式用於參數曲線的類比

make_interp_spline

建構內插樣條 (s = 0)

make_lsq_spline

建構給定節點向量的最小平方法樣條

splrep

此常式的 FITPACK 類比

註解

此常式建構平滑樣條函數 \(g(x)\),以最小化內部節點 (\(x_b < t_i < x_e\)) 處 k 階導數的跳躍總和 \(D_j\),其中

\[D_i = g^{(k)}(t_i + 0) - g^{(k)}(t_i - 0)\]

具體而言,此常式建構樣條函數 \(g(x)\),以最小化

\[\sum_i | D_i |^2 \to \mathrm{min}\]

前提是

\[\sum_{j=1}^m (w_j \times (g(x_j) - y_j))^2 \leqslant s ,\]

其中 \(s > 0\) 是輸入參數。

換句話說,我們平衡最大化平滑度 (以導數的跳躍衡量,第一個準則) 和 \(g(x_j)\) 與資料 \(y_j\) 的偏差 (第二個準則)。

請注意,第二個準則中的總和遍及所有資料點,而第一個準則中的總和遍及內部樣條節點 (即 xb < t[i] < xe 的節點)。樣條節點通常是資料的子集,詳細資訊請參閱 generate_knots

另請注意此常式與 make_lsq_spline 的區別:後者常式不考慮平滑度,而只是簡單地解決最小平方法問題

\[\sum w_j \times (g(x_j) - y_j)^2 \to \mathrm{min}\]

對於具有 _固定_ 節點向量 t 的樣條函數 \(g(x)\)

在版本 1.15.0 中新增。

參考文獻

[1]

P. Dierckx, “Algorithms for smoothing data with periodic and parametric splines, Computer Graphics and Image Processing”, 20 (1982) 171-184.

[2]

P. Dierckx, “Curve and surface fitting with splines”, Monographs on Numerical Analysis, Oxford University Press, 1993.