numpy.polynomial.hermite_e.hermefit#

polynomial.hermite_e.hermefit(x, y, deg, rcond=None, full=False, w=None)[原始碼]#

厄米級數對資料的最小平方法擬合。

傳回 degree deg 的厄米E級數係數,此級數是對在點 x 給定的資料值 y 的最小平方法擬合。如果 y 是一維的,則傳回的係數也將是一維的。如果 y 是二維的,則會進行多次擬合,每個擬合對應 y 的每一列,並且結果係數儲存在二維傳回值的相應列中。擬合的多項式形式為

\[p(x) = c_0 + c_1 * He_1(x) + ... + c_n * He_n(x),\]

其中 ndeg

參數:
xarray_like,形狀 (M,)

M 個樣本點的 x 座標 (x[i], y[i])

yarray_like,形狀 (M,) 或 (M, K)

樣本點的 y 座標。可以透過傳入一個二維陣列一次擬合多個共享相同 x 座標的樣本點資料集,該陣列的每一列包含一個資料集。

degint 或 1-D array_like

擬合多項式的次數。如果 deg 是單一整數,則擬合中包含直到且包含 deg 次項的所有項。對於 NumPy 版本 >= 1.11.0,可以使用整數列表來指定要包含的項的次數。

rcondfloat,選用

擬合的相對條件數。小於此值(相對於最大奇異值)的奇異值將被忽略。預設值為 len(x)*eps,其中 eps 是浮點類型的相對精度,在大多數情況下約為 2e-16。

fullbool,選用

切換決定傳回值的性質。當為 False(預設值)時,僅傳回係數;當為 True 時,也會傳回來自奇異值分解的診斷資訊。

warray_like,形狀 (M,), 選用

權重。如果不是 None,則權重 w[i] 適用於 x[i] 處的未平方殘差 y[i] - y_hat[i]。理想情況下,權重的選擇應使乘積 w[i]*y[i] 的誤差都具有相同的變異數。當使用反變異數加權時,請使用 w[i] = 1/sigma(y[i])。預設值為 None。

傳回:
coefndarray,形狀 (M,) 或 (M, K)

厄米係數,從低次到高次排序。如果 y 是二維的,則 y 的第 k 列中資料的係數位於第 k 列中。

[residuals, rank, singular_values, rcond]list

僅當 full == True 時才會傳回這些值

  • residuals – 最小平方法擬合的平方殘差和

  • rank – 縮放的 Vandermonde 矩陣的數值秩

  • singular_values – 縮放的 Vandermonde 矩陣的奇異值

  • rcond – rcond 的值。

如需更多詳細資訊,請參閱 numpy.linalg.lstsq

警告:
RankWarning

最小平方法擬合中係數矩陣的秩不足。僅當 full = False 時才會引發警告。可以透過以下方式關閉警告

>>> import warnings
>>> warnings.simplefilter('ignore', np.exceptions.RankWarning)

另請參閱

numpy.polynomial.chebyshev.chebfit
numpy.polynomial.legendre.legfit
numpy.polynomial.polynomial.polyfit
numpy.polynomial.hermite.hermfit
numpy.polynomial.laguerre.lagfit
hermeval

評估厄米級數。

hermevander

厄米級數的偽 Vandermonde 矩陣。

hermeweight

厄米E權重函數。

numpy.linalg.lstsq

從矩陣計算最小平方法擬合。

scipy.interpolate.UnivariateSpline

計算樣條擬合。

註解

解是厄米E級數 p 的係數,它最小化了加權平方誤差的總和

\[E = \sum_j w_j^2 * |y_j - p(x_j)|^2,\]

其中 \(w_j\) 是權重。此問題透過建立(通常是)過度決定的矩陣方程式來解決

\[V(x) * c = w * y,\]

其中 Vx 的偽 Vandermonde 矩陣,c 的元素是要解出的係數,而 y 的元素是觀測值。然後使用 V 的奇異值分解來解此方程式。

如果 V 的某些奇異值太小以至於被忽略,則會發出 RankWarning。這表示係數值可能無法精確確定。使用較低階的擬合通常會消除警告。rcond 參數也可以設定為小於其預設值的值,但產生的擬合可能是虛假的,並且可能受到捨入誤差的很大影響。

當資料可以近似為 sqrt(w(x)) * p(x) 時,使用厄米E級數進行擬合可能最有用,其中 w(x) 是厄米E權重。在這種情況下,權重 sqrt(w(x[i])) 應與資料值 y[i]/sqrt(w(x[i])) 一起使用。權重函數可作為 hermeweight 使用。

參考文獻

[1]

Wikipedia,“曲線擬合”,https://en.wikipedia.org/wiki/Curve_fitting

範例

>>> import numpy as np
>>> from numpy.polynomial.hermite_e import hermefit, hermeval
>>> x = np.linspace(-10, 10)
>>> rng = np.random.default_rng()
>>> err = rng.normal(scale=1./10, size=len(x))
>>> y = hermeval(x, [1, 2, 3]) + err
>>> hermefit(x, y, 2)
array([1.02284196, 2.00032805, 2.99978457]) # may vary