本文簡要介紹 python 語言中 scipy.interpolate.BarycentricInterpolator
的用法。
用法:
class scipy.interpolate.BarycentricInterpolator(xi, yi=None, axis=0, *, wi=None, random_state=None)#
對一組點進行插值多項式。
構造一個通過給定點集的多項式。允許評估多項式及其所有導數、有效更改要插值的 y-values,以及通過添加更多 x- 和 y-values 進行更新。
出於數值穩定性的原因,該函數不計算多項式的係數。
需要在計算函數之前提供 yi 值,但任何預處理都不依賴於它們,因此可以快速更新。
- xi: 類似數組,形狀 (npoints, )
多項式應通過的點的 x 坐標的一維數組
- yi: 數組,形狀(...,npoints,...),可選
N-D 多項式應經過的點的 y 坐標數組。如果沒有,則 y 值稍後將通過set_y方法。長度為義沿插補軸的長度必須等於xi。使用
axis
參數來選擇正確的軸。- axis: 整數,可選
yi 數組中的軸對應於 x 坐標值。默認為
axis=0
。- wi: 數組,可選
所選插值點 xi 的重心權重。如果不存在或無,則權重將從 xi (默認)計算。如果使用相同節點 xi 計算多個插值,則這允許重新使用權重 wi,而無需重新計算。
- random_state: {無,int,
numpy.random.Generator
,numpy.random.RandomState
},可選 如果種子是無(或np.random), 這
numpy.random.RandomState
使用單例。如果種子是一個 int,一個新的RandomState
使用實例,播種種子.如果種子已經是一個Generator
或者RandomState
實例然後使用該實例。
參數 ::
注意:
此類使用 “barycentric interpolation” 方法,將問題視為有理函數插值的特殊情況。該算法在數值上相當穩定,但即使在精確計算的世界中,除非非常仔細地選擇 x 坐標 - 切比雪夫零點(例如,cos(i*pi/n))是一個不錯的選擇 - 多項式插值本身就是一個由於龍格現象,非常ill-conditioned過程。
基於 Berrut 和 Trefethen 2004 年,“Barycentric Lagrange Interpolation”。
例子:
要生成逼近函數 及其前四個導數的五次重心插值,請使用 中的六個 randomly-spaced 節點:
>>> import numpy as np >>> import matplotlib.pyplot as plt >>> from scipy.interpolate import BarycentricInterpolator >>> rng = np.random.default_rng() >>> xi = rng.random(6) * np.pi/2 >>> f, f_d1, f_d2, f_d3, f_d4 = np.sin, np.cos, lambda x: -np.sin(x), lambda x: -np.cos(x), np.sin >>> P = BarycentricInterpolator(xi, f(xi), random_state=rng) >>> fig, axs = plt.subplots(5, 1, sharex=True, layout='constrained', figsize=(7,10)) >>> x = np.linspace(0, np.pi, 100) >>> axs[0].plot(x, P(x), 'r:', x, f(x), 'k--', xi, f(xi), 'xk') >>> axs[1].plot(x, P.derivative(x), 'r:', x, f_d1(x), 'k--', xi, f_d1(xi), 'xk') >>> axs[2].plot(x, P.derivative(x, 2), 'r:', x, f_d2(x), 'k--', xi, f_d2(xi), 'xk') >>> axs[3].plot(x, P.derivative(x, 3), 'r:', x, f_d3(x), 'k--', xi, f_d3(xi), 'xk') >>> axs[4].plot(x, P.derivative(x, 4), 'r:', x, f_d4(x), 'k--', xi, f_d4(xi), 'xk') >>> axs[0].set_xlim(0, np.pi) >>> axs[4].set_xlabel(r"$x$") >>> axs[4].set_xticks([i * np.pi / 4 for i in range(5)], ... ["0", r"$\frac{\pi}{4}$", r"$\frac{\pi}{2}$", r"$\frac{3\pi}{4}$", r"$\pi$"]) >>> axs[0].set_ylabel("$f(x)$") >>> axs[1].set_ylabel("$f'(x)$") >>> axs[2].set_ylabel("$f''(x)$") >>> axs[3].set_ylabel("$f^{(3)}(x)$") >>> axs[4].set_ylabel("$f^{(4)}(x)$") >>> labels = ['Interpolation nodes', 'True function $f$', 'Barycentric interpolation'] >>> axs[0].legend(axs[0].get_lines()[::-1], labels, bbox_to_anchor=(0., 1.02, 1., .102), ... loc='lower left', ncols=3, mode="expand", borderaxespad=0., frameon=False) >>> plt.show()
- dtype:
屬性 ::
相關用法
- Python SciPy interpolate.BSpline用法及代碼示例
- Python SciPy interpolate.BPoly用法及代碼示例
- Python SciPy interpolate.make_interp_spline用法及代碼示例
- Python SciPy interpolate.krogh_interpolate用法及代碼示例
- Python SciPy interpolate.InterpolatedUnivariateSpline用法及代碼示例
- 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.splrep用法及代碼示例
- Python SciPy interpolate.make_smoothing_spline用法及代碼示例
- Python SciPy interpolate.Rbf用法及代碼示例
注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.interpolate.BarycentricInterpolator。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。