我的項目出現了一些問題,因爲我有一組數據,我繪製它以獲得2條曲線,我想用指數曲線擬合這些曲線。如何用指數曲線擬合數據
我看過這個帖子:fitting exponential decay with no initial guessing。 但我的例子有點不同。
這就是我與數據獲取:
我的腳本如下:
mask_G = np.bitwise_and(tbdata['G'] < 99.99, tbdata['GERR'] < 0.2)
mask_R = np.bitwise_and(tbdata['R'] < 99.99, tbdata['RERR'] < 0.2)
G_corrected = tbdata[mask_G]
R_corrected = tbdata[mask_R]
fig13 = plt.gcf()
fig13.set_size_inches(16, 9)
fig13, (ax1,ax2) = plt.subplots(1,2)
fig_error_g = ax1.plot(G_corrected['G'], G_corrected['GERR'], '.')
ax1.set_xlabel('G')
ax1.set_ylabel('GERR')
ax1.set_title('Evolution de GERR en fonction de G')
fig_error_r = ax2.plot(R_corrected['R'], R_corrected['RERR'], '.')
ax2.set_xlabel('R')
ax2.set_ylabel('RERR')
ax2.set_title('Evolution de RERR en fonction de R')
fig13.tight_layout()
plt.savefig('graphique.png')
plt.show()
我試着寫的是,它基於SciPy的文檔:
def exponential(x,a,b,c) :
return a * np.exp(-b * x) + c
xdata = G_corrected['G']
y = G_corrected['GERR']
ydata = y + 0.2 * np.random.normal(size=len(xdata))
popt, pcov = curve_fit(exponential, xdata, ydata)
但我得到:
/home/user/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/scipy/optimize/minpack.py:601:OptimizeWarning:參數的協方差無法估計
類別= OptimizeWarning)
您對我如何處理有什麼想法嗎?
非常感謝你;)
編輯:
我想適合我的情節那樣:
mask_G = np.bitwise_and(tbdata['G'] < 99.99, tbdata['GERR'] < 0.2)
mask_R = np.bitwise_and(tbdata['R'] < 99.99, tbdata['RERR'] < 0.2)
G_corrected = tbdata[mask_G]
R_corrected = tbdata[mask_R]
params = np.polyfit(G_corrected['G'], np.log(G_corrected['GERR']),1)
a = params[0]
A = np.exp(params[1])
fig13 = plt.gcf()
fig13.set_size_inches(16, 9)
fig13, (ax1,ax2) = plt.subplots(1,2)
fig_error_g = ax1.plot(G_corrected['G'], (G_corrected['GERR']), '.')
fig_error_g = ax1.plot(G_corrected['G'], (A*np.exp(a*G_corrected['G'])),'.')
ax1.set_xlabel('G')
ax1.set_ylabel('GERR')
ax1.set_title('Evolution de GERR en fonction de G')
fig_error_r = ax2.plot(R_corrected['R'], np.log(R_corrected['RERR']), '.')
ax2.set_xlabel('R')
ax2.set_ylabel('RERR')
ax2.set_title('Evolution de RERR en fonction de R')
fig13.tight_layout()
plt.savefig('graphique.png')
plt.show()
,我也得到:
你是什麼想想結果?
謝謝你的回答。正如你所說的,我在我的陰謀中對我的y值應用了對數標度(即編輯過的問題)。現在,我需要從scipy使用'curve_fit'嗎? – Deadpool
我會對日誌數據使用線性擬合:http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.stats.linregress.html - 您可以在對數刻度上繪製您的數據看看它是否是線性的(你的編輯)?也許log-log縮放,即兩個軸都應該這樣做。 – Frank