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
嚴格正數的一維權重陣列,長度與 x 和 y 相同。權重用於計算加權最小平方法樣條擬合。如果 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))
內找到,其中m
是 x、y 和 w 中的資料點數量。預設值為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=0,
spl(x) == y
。對於 s 的非零值,spl 表示 (x, y) 的平滑近似,通常節點較少。
- spla
另請參閱
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.