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(導數值)。
對於另一個範例,給定每個點的 xi、yi 和導數 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 處的多個導數