我有兩個列表,我試圖做一個形式之間的指數擬合y = a * e ^(bx)。我使用的方法類似於here的第二個答案,但是結果與我從excel測試中得知的結果不匹配。這裏是我的代碼:2列表之間的指數擬合
import numpy as np
from scipy.optimize import curve_fit
exp_constants = [62.5, 87.5, 112.5, 137.5, 162.5, 187.5, 212.5, 237.5, 262.5, 287.5]
means = [211.94, 139.30, 80.09, 48.29, 26.94, 12.12, 3.99, 1.02, 0.09, 0.02]
def func(x1, a, b):
return a * np.exp(b * x1)
popt, pcov = curve_fit(func, exp_constants, means)
當返回popt[0]
和popt[1]
我分別得到3.222e-127和1.0。但是,當用excel檢查時,正確的指數方程應該是y = 7231.3e ^( - 0.04x)。我對curve_fit方法不是很熟悉,在代碼中是否缺少某些東西,或者有更好的方法來獲得正確的指數擬合?
編輯:這是用下面的代碼所做的情節:
plt.figure()
plt.plot(exp_constants, means, 'ko', label="Data")
plt.plot(exp_constants, func(exp_constants, *popt), 'r-', label="Fitted Curve")
plt.legend()
plt.show
你有你的繪圖配合和數據點? – 2015-02-09 16:22:57
是的,看編輯添加到原始問題 – mbreezy 2015-02-09 16:55:53