本文簡要介紹 python 語言中 scipy.interpolate.make_interp_spline
的用法。
用法:
scipy.interpolate.make_interp_spline(x, y, k=3, t=None, bc_type=None, axis=0, check_finite=True)#
計算插值 B-spline 的(係數)。
- x: 數組, 形狀 (n,)
橫坐標。
- y: 數組,形狀(n,...)
縱坐標。
- k: 整數,可選
B-spline學位。默認為立方體,
k = 3
。- t: 數組,形狀(nt + k + 1,),可選。
結。結的數量需要與數據點的數量和邊導數的數量一致。具體來說,
nt - n
必須等於len(deriv_l) + len(deriv_r)
。- bc_type: 2 元組或無
邊界條件。默認為 None,這意味著自動選擇邊界條件。否則,它必須是 length-two 元組,其中第一個元素 (
deriv_l
) 在x[0]
設置邊界條件,第二個元素 (deriv_r
) 在x[-1]
設置邊界條件。其中每個都必須是可迭代的對(order, value)
,它給出插值間隔給定邊處指定階導數的值。或者,可以識別以下字符串別名:"clamped"
:末端的一階導數為零。這是相當於
bc_type=([(1, 0.0)], [(1, 0.0)])
。
"natural"
:末端的二階導數為零。這相當於bc_type=([(2, 0.0)], [(2, 0.0)])
。"not-a-knot"
(默認):第一段和第二段是相同的多項式。這相當於擁有bc_type=None
。"periodic"
:值和末尾的第一個k-1
導數是等價的。
- axis: 整數,可選
插值軸。默認值為 0。
- check_finite: 布爾型,可選
是否檢查輸入數組是否僅包含有限數。禁用可能會提高性能,但如果輸入確實包含無窮大或 NaN,則可能會導致問題(崩潰、非終止)。默認為真。
- b: 度數為
k
並帶有結t
的 BSpline 對象。
- b: 度數為
參數 ::
返回 ::
例子:
在 Chebyshev 節點上使用三次插值:
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> def cheb_nodes(N): ... jj = 2.*np.arange(N) + 1 ... x = np.cos(np.pi * jj / 2 / N)[::-1] ... return x
>>> x = cheb_nodes(20) >>> y = np.sqrt(1 - x**2)
>>> from scipy.interpolate import BSpline, make_interp_spline >>> b = make_interp_spline(x, y) >>> np.allclose(b(x), y) True
請注意,默認為具有 not-a-knot 邊界條件的三次樣條
>>> b.k 3
在這裏,我們使用 ‘natural’ 樣條曲線,邊處的二階導數為零:
>>> l, r = [(2, 0.0)], [(2, 0.0)] >>> b_n = make_interp_spline(x, y, bc_type=(l, r)) # or, bc_type="natural" >>> np.allclose(b_n(x), y) True >>> x0, x1 = x[0], x[-1] >>> np.allclose([b_n(x0, 2), b_n(x1, 2)], [0, 0]) True
還支持參數曲線的插值。例如,我們計算極坐標中蝸牛曲線的離散化
>>> phi = np.linspace(0, 2.*np.pi, 40) >>> r = 0.3 + np.cos(phi) >>> x, y = r*np.cos(phi), r*np.sin(phi) # convert to Cartesian coordinates
構建插值曲線,通過角度對其進行參數化
>>> spl = make_interp_spline(phi, np.c_[x, y])
在更精細的網格上評估插值(請注意,我們轉置結果以將其解包為一對 x- 和 y-arrays)
>>> phi_new = np.linspace(0, 2.*np.pi, 100) >>> x_new, y_new = spl(phi_new).T
繪製結果
>>> plt.plot(x, y, 'o') >>> plt.plot(x_new, y_new, '-') >>> plt.show()
用 2 維 y 構建 B-spline 曲線
>>> x = np.linspace(0, 2*np.pi, 10) >>> y = np.array([np.sin(x), np.cos(x)])
滿足周期性條件,因為兩端點的 y 坐標相等
>>> ax = plt.axes(projection='3d') >>> xx = np.linspace(0, 2*np.pi, 100) >>> bspl = make_interp_spline(x, y, k=5, bc_type='periodic', axis=1) >>> ax.plot3D(xx, *bspl(xx)) >>> ax.scatter3D(x, *y, color='red') >>> plt.show()
相關用法
- Python SciPy interpolate.make_smoothing_spline用法及代碼示例
- Python SciPy interpolate.make_lsq_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.splder用法及代碼示例
- 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.sproot用法及代碼示例
- Python SciPy interpolate.splantider用法及代碼示例
- Python SciPy interpolate.CloughTocher2DInterpolator用法及代碼示例
- Python SciPy interpolate.interp1d用法及代碼示例
- Python SciPy interpolate.BPoly用法及代碼示例
- Python SciPy interpolate.BarycentricInterpolator用法及代碼示例
- Python SciPy interpolate.splrep用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.interpolate.make_interp_spline。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。