我正在使用 Python 3,并且正在嘗試使用指數函式找到以下資料集的最佳擬合
xdata = [329.14, 339.43, 344.13, 347.02, 350.79, 353.54, 355.62, 360.51, 362.36, 364.89,
366.66, 369.0,371.87, 372.91]
ydata = [13.03, 20.53, 25.08, 28.38, 33.18, 36.93, 40.13, 48.23, 51.98, 57.23, 60.98, 66.43,
73.23, 76.28]
然后我執行下面的代碼:
opt.curve_fit(lambda t, a, b: a*np.exp(b/t), xdata, ydata, p0=[P0, p[0]])
哪里P0, p[0] = 76.28, -4957.925919691658。但我收到以下錯誤
<ipython-input-67-64582d269012>:3: RuntimeWarning: overflow encountered in exp
opt.curve_fit(lambda t, a, b: a*np.exp(b/t), xdata, ydata, p0=[76.3, p[0]])
我很確定這個問題與p0特別有關,P0因為如果我洗掉它,我會得到
(array([ 4.33524091e 07, -4.94111729e 03]),
array([[ 1.93745891e 12, -1.62915424e 07],
[-1.62915424e 07, 1.37067431e 02]]))
但我并不真正滿足這一點,因為我期待一個指數擬合曲線可以提供a大約P0.
我想知道如何對上面的資料應用指數擬合,這樣a就可以了P0。我可以接受 python 上的任何方法,即使它沒有使用opt.curve_fit.
謝謝。
uj5u.com熱心網友回復:
問題在于 的值很小a。最小化程序試圖通過b導致溢位來進行補償。我用起始值得到了很好的結果p0=( 3.2e6, -4000 )或者,您可以定義函式以使其exp( a - b / t )覆寫良好,p0=( 15, -4000 )甚至不提供p0
uj5u.com熱心網友回復:
取對數并嘗試線性擬合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414366.html
標籤:
