scipy.interpolate.

KroghInterpolator#

class scipy.interpolate.KroghInterpolator(xi, yi, axis=0)[source]#

一組點的插值多項式。

此多項式通過所有點對 (xi, yi)。 您還可以額外指定每個點 xi 的導數數量; 這可以通過重複值 xi 並將導數指定為連續的 yi 值來完成。

允許評估多項式及其所有導數。 由於數值穩定性的原因,此函數不計算多項式的係數,儘管可以通過評估所有導數來獲得它們。

參數:
xiarray_like,形狀 (npoints, )

已知的 x 座標。 必須按遞增順序排序。

yiarray_like,形狀 (…, npoints, …)

已知的 y 座標。 當 xi 連續出現兩次或多次時,對應的 yi 代表導數值。 yi 沿插值軸的長度必須等於 xi 的長度。 使用 axis 參數選擇正確的軸。

axisint,可選

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

註解

請注意,此處實作的演算法不一定是已知的數值最穩定的演算法。 此外,即使在精確計算的世界中,除非非常仔細地選擇 x 座標 - Chebyshev 零點(例如,cos(i*pi/n))是一個不錯的選擇 - 由於 Runge 現象,多項式插值本身就是一個病態過程。 一般來說,即使使用精心選擇的 x 值,高於約三十次的次數也會在此程式碼中引起數值不穩定問題。

基於 [1]

參考文獻

[1]

Krogh,“多項式插值和數值微分的有效演算法”,1970 年。

範例

要產生一個在 0 和 1 處為零且在 0 處導數為 2 的多項式,請調用

>>> from scipy.interpolate import KroghInterpolator
>>> KroghInterpolator([0,0,1],[0,2,0])

這構造了二次方程式 \(2x^2-2x\)。 導數條件由 xi 陣列中重複的零表示; 對應的 yi 值為 0(函數值)和 2(導數值)。

對於另一個範例,給定每個點的 xiyi 和導數 ypi,可以構造適當的陣列,如下所示

>>> import numpy as np
>>> rng = np.random.default_rng()
>>> xi = np.linspace(0, 1, 5)
>>> yi, ypi = rng.random((2, 5))
>>> xi_k, yi_k = np.repeat(xi, 2), np.ravel(np.dstack((yi,ypi)))
>>> KroghInterpolator(xi_k, yi_k)

要產生向量值多項式,請為 yi 提供更高維度的陣列

>>> KroghInterpolator([0,1],[[2,3],[4,5]])

這構造了一個線性多項式,在 0 處給出 (2,3),在 1 處給出 (4,5)。

屬性:
dtype

方法

__call__(x)

評估插值器

derivative(x[, der])

評估多項式在點 x 處的單個導數。

derivatives(x[, der])

評估多項式在點 x 處的多個導數