numpy.polynomial.laguerre.lagfit#
- polynomial.laguerre.lagfit(x, y, deg, rcond=None, full=False, w=None)[原始碼]#
拉蓋爾級數對資料的最小平方擬合。
傳回 degree 為 deg 的拉蓋爾級數係數,此級數是對給定點 x 的資料值 y 進行最小平方擬合。如果 y 是一維的,則傳回的係數也將是一維的。如果 y 是二維的,則會進行多次擬合,y 的每一列進行一次擬合,且結果係數會儲存在二維傳回值的對應列中。擬合的多項式形式為
\[p(x) = c_0 + c_1 * L_1(x) + ... + c_n * L_n(x),\]其中
n
為 deg。- 參數::
- xarray_like,形狀為 (M,)
M 個樣本點的 x 座標
(x[i], y[i])
。- yarray_like,形狀為 (M,) 或 (M, K)
樣本點的 y 座標。可以一次擬合多個共用相同 x 座標的樣本點資料集,方法是傳入一個 2D 陣列,其中每列包含一個資料集。
- degint 或 1-D array_like
擬合多項式的 degree。如果 deg 是單一整數,則擬合中會包含直到且包括 deg 階項的所有項。對於 NumPy 版本 >= 1.11.0,可以使用整數列表來指定要包含的項的 degree。
- 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.polynomial.polyfit
numpy.polynomial.legendre.legfit
numpy.polynomial.chebyshev.chebfit
numpy.polynomial.hermite.hermfit
numpy.polynomial.hermite_e.hermefit
lagval
評估拉蓋爾級數。
lagvander
拉蓋爾級數的偽 Vandermonde 矩陣。
lagweight
拉蓋爾權重函數。
numpy.linalg.lstsq
從矩陣計算最小平方擬合。
scipy.interpolate.UnivariateSpline
計算樣條擬合。
註解
解是拉蓋爾級數
p
的係數,可最小化加權平方誤差的總和\[E = \sum_j w_j^2 * |y_j - p(x_j)|^2,\]其中 \(w_j\) 是權重。此問題的解決方法是建立(通常是)超定的矩陣方程式
\[V(x) * c = w * y,\]其中
V
是 x 的加權偽 Vandermonde 矩陣,c
是要解出的係數,w 是權重,而 y 是觀測值。然後使用V
的奇異值分解來解此方程式。如果 V 的某些奇異值太小而被忽略,則會發出
RankWarning
。這表示係數值可能無法準確確定。使用較低階的擬合通常可以消除警告。rcond 參數也可以設定為小於其預設值的值,但產生的擬合可能是虛假的,並且可能具有來自捨入誤差的大量貢獻。當資料可以近似為
sqrt(w(x)) * p(x)
時,使用拉蓋爾級數進行擬合可能最有用,其中w(x)
是拉蓋爾權重。在這種情況下,權重sqrt(w(x[i]))
應與資料值y[i]/sqrt(w(x[i]))
一起使用。權重函數可作為lagweight
使用。參考文獻
[1]Wikipedia,“曲線擬合”,https://en.wikipedia.org/wiki/Curve_fitting
範例
>>> import numpy as np >>> from numpy.polynomial.laguerre import lagfit, lagval >>> x = np.linspace(0, 10) >>> rng = np.random.default_rng() >>> err = rng.normal(scale=1./10, size=len(x)) >>> y = lagval(x, [1, 2, 3]) + err >>> lagfit(x, y, 2) array([1.00578369, 1.99417356, 2.99827656]) # may vary