私はデータセットを持っているので私のプロジェクトには少し問題があります。私は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)
私はどのように処理することができますか?
はどうもありがとう;)
EDIT:
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 - 対数スケールでデータをプロットすることはできますかそのスケールで線形であるかどうかを確認します(編集します)。たぶんログログのスケーリング、つまり両方の軸でそれを行う必要があります。 – Frank