scipy.interpolate.

PchipInterpolator#

class scipy.interpolate.PchipInterpolator(x, y, axis=0, extrapolate=None)[source]#

PCHIP 1-D 單調三次內插。

xy 是用於逼近某函數 f 的值陣列,其中 y = f(x)。內插器使用單調三次樣條來尋找新點的值。(PCHIP 代表 Piecewise Cubic Hermite Interpolating Polynomial,分段三次 Hermite 內插多項式)。

參數:
xndarray,形狀 (npoints, )

單調遞增實數值的一維陣列。 x 不能包含重複值(否則 f 將被過度指定)

yndarray,形狀 (…, npoints, …)

實數值的 N 維陣列。 y 沿內插軸的長度必須等於 x 的長度。使用 axis 參數來選擇內插軸。

axisint,可選

y 陣列中對應於 x 座標值的軸。預設為 axis=0

extrapolatebool,可選

是否基於第一個和最後一個區間外插到超出範圍的點,或返回 NaN。

另請參閱

CubicHermiteSpline

分段三次內插器。

Akima1DInterpolator

Akima 1D 內插器。

CubicSpline

三次樣條資料內插器。

PPoly

以係數和斷點表示的分段多項式。

Notes

內插器保留內插資料的單調性,如果資料不平滑,則不會過衝。

一階導數保證是連續的,但二階導數可能在 \(x_k\) 處跳躍。

通過使用 PCHIP 演算法 [1] 確定點 \(x_k\) 處的導數 \(f'_k\)

\(h_k = x_{k+1} - x_k\),且 \(d_k = (y_{k+1} - y_k) / h_k\) 為內部點 \(x_k\) 的斜率。如果 \(d_k\)\(d_{k-1}\) 的符號不同或其中一個等於零,則 \(f'_k = 0\)。否則,它由加權調和平均值給出

\[\frac{w_1 + w_2}{f'_k} = \frac{w_1}{d_{k-1}} + \frac{w_2}{d_k}\]

其中 \(w_1 = 2 h_k + h_{k-1}\)\(w_2 = h_k + 2 h_{k-1}\)

端點斜率使用單邊方案設定 [2]

參考文獻

[1]

F. N. Fritsch 和 J. Butland,用於建構局部單調分段三次內插器的方法,SIAM J. Sci. Comput., 5(2), 300-304 (1984)。 DOI:10.1137/0905021

[2]

參見,例如,C. Moler, Numerical Computing with Matlab, 2004。 DOI:10.1137/1.9780898717952

屬性:
axis
c
extrapolate
x

方法

__call__(x[, nu, extrapolate])

評估分段多項式或其導數。

derivative([nu])

建構一個新的分段多項式,表示導數。

antiderivative([nu])

建構一個新的分段多項式,表示反導數。

roots([discontinuity, extrapolate])

尋找分段多項式的實根。