我有两个列表,我试图做一个形式之间的指数拟合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