本文簡要介紹 python 語言中 scipy.interpolate.splrep
的用法。
用法:
scipy.interpolate.splrep(x, y, w=None, xb=None, xe=None, k=3, task=0, s=None, t=None, full_output=0, per=0, quiet=1)#
找到一維曲線的B-spline 表示。
給定一組數據點
(x[i], y[i])
確定區間xb <= x <= xe
上 k 度的平滑樣條近似。- x, y: array_like
定義曲線 y = f(x) 的數據點。
- w: 數組,可選
嚴格正的 1 階權重數組,其長度與 x 和 y 相同。權重用於計算加權最小二乘樣條擬合。如果 y 值中的誤差具有由向量 d 給出的標準差,則 w 應為 1/d。默認值為ones(len(x))。
- xb, xe: 浮點數,可選
適合的間隔。如果沒有,它們分別默認為 x[0] 和 x[-1]。
- k: 整數,可選
樣條擬合的程度。建議使用三次樣條。應避免使用偶數 k 值,尤其是在 s 值較小的情況下。 1 <= k <= 5
- task: {1, 0, -1},可選
如果 task==0 找到給定平滑因子 s 的 t 和 c。
如果 task==1 找到 t 和 c 以獲得平滑因子的另一個值,s。對於同一組數據,之前必須有一個 task=0 或 task=1 的調用(t 將被存儲在內部使用)
如果 task=-1 找到給定節點集 t 的加權最小二乘樣條。這些應該是內部結,因為末端的結將自動添加。
- s: 浮點數,可選
平滑條件。平滑度通過滿足以下條件來確定:
sum((w * (y - g))**2,axis=0) <= s
,其中 g(x) 是 (x,y) 的平滑插值。用戶可以使用 s 來控製貼合的緊密度和平滑度之間的權衡。較大的 s 意味著更多的平滑,而較小的 s 值表明更少的平滑。 s 的推薦值取決於權重 w。如果權重表示 y 標準差的倒數,則應在 (m-sqrt(2*m),m+sqrt(2*m)) 範圍內找到良好的 s 值,其中 m 是x、y 和 w 中的數據點。默認值:如果提供了權重,則 s=m-sqrt(2*m)。如果未提供權重,則 s = 0.0(插值)。- t: 數組,可選
任務所需的結=-1。如果給定,則任務自動設置為-1。
- full_output: 布爾型,可選
如果非零,則返回可選輸出。
- per: 布爾型,可選
如果非零,則認為數據點是周期性的,周期為 x[m-1] - x[0],並返回平滑的周期性樣條近似。不使用 y[m-1] 和 w[m-1] 的值。
- quiet: 布爾型,可選
非零抑製消息。
- tck: 元組
一個元組 (t,c,k),包含節點向量、B-spline 係數和樣條曲線的度數。
- fp: 數組,可選
樣條近似的殘差平方和的加權和。
- ier: 整數,可選
關於 splrep 成功的整數標誌。如果 ier<=0,則表示成功。如果 ier 在 [1,2,3] 中發生錯誤但未引發錯誤。否則會引發錯誤。
- msg: str,可選
與整數標誌 ier 對應的消息。
參數 ::
返回 ::
注意:
請參閱
splev
以評估樣條及其導數。使用來自 FITPACK 的 FORTRAN 例程curfit
。用戶有責任確保x是獨一無二的。否則,
splrep
不會返回合理的結果。如果提供,結t必須滿足Schoenberg-Whitney條件,即必須有數據點的子集
x[j]
這樣t[j] < x[j] < t[j+k+1]
, 為了j=0, 1,...,n-k-2
.此例程 zero-pads 係數數組
c
具有與結數組t
相同的長度(評估例程忽略尾隨的k + 1
係數,splev
和BSpline
。)這是在與splprep
相比,它沒有 zero-pad 係數。參考:
基於 [1]、[2]、[3] 和 [4] 中說明的算法:
[1]P. Dierckx,“使用樣條函數對實驗數據進行平滑、微分和積分的算法”,J.Comp.Appl.Maths 1 (1975) 165-184。
[2]P. Dierckx,“使用樣條函數在矩形網格上平滑數據的快速算法”,SIAM J.Numer.Anal。 19 (1982) 1286-1304。
[3]P. Dierckx,“用樣條函數進行曲線擬合的改進算法”,報告 tw54,計算機科學係,K.U.魯汶,1981 年。
[4]P. Dierckx,“用樣條擬合曲線和曲麵”,數值分析專著,牛津大學出版社,1993 年。
例子:
您可以使用B-spline 曲線插入一維點。教程中提供了更多示例。
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.interpolate import splev, splrep >>> x = np.linspace(0, 10, 10) >>> y = np.sin(x) >>> spl = splrep(x, y) >>> x2 = np.linspace(0, 10, 200) >>> y2 = splev(x2, spl) >>> plt.plot(x, y, 'o', x2, y2) >>> plt.show()
相關用法
- Python SciPy interpolate.splder用法及代碼示例
- Python SciPy interpolate.splantider用法及代碼示例
- Python SciPy interpolate.splprep用法及代碼示例
- Python SciPy interpolate.sproot用法及代碼示例
- Python SciPy interpolate.make_interp_spline用法及代碼示例
- Python SciPy interpolate.krogh_interpolate用法及代碼示例
- Python SciPy interpolate.InterpolatedUnivariateSpline用法及代碼示例
- Python SciPy interpolate.BSpline用法及代碼示例
- Python SciPy interpolate.LSQSphereBivariateSpline用法及代碼示例
- Python SciPy interpolate.griddata用法及代碼示例
- Python SciPy interpolate.LinearNDInterpolator用法及代碼示例
- Python SciPy interpolate.PPoly用法及代碼示例
- Python SciPy interpolate.NdBSpline用法及代碼示例
- Python SciPy interpolate.pade用法及代碼示例
- Python SciPy interpolate.barycentric_interpolate用法及代碼示例
- Python SciPy interpolate.RegularGridInterpolator用法及代碼示例
- Python SciPy interpolate.NdPPoly用法及代碼示例
- Python SciPy interpolate.interp2d用法及代碼示例
- Python SciPy interpolate.approximate_taylor_polynomial用法及代碼示例
- Python SciPy interpolate.RectSphereBivariateSpline用法及代碼示例
- Python SciPy interpolate.CloughTocher2DInterpolator用法及代碼示例
- Python SciPy interpolate.interp1d用法及代碼示例
- Python SciPy interpolate.BPoly用法及代碼示例
- Python SciPy interpolate.BarycentricInterpolator用法及代碼示例
- Python SciPy interpolate.make_smoothing_spline用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.interpolate.splrep。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。