【发布时间】:2021-11-02 16:19:29
【问题描述】:
我一直在尝试将这些数据点拟合到指数模型y=ae^(px+qx^2)。我需要此模型拟合的原因是由于 Göran Englund 2011 年发表的论文“功能响应的温度依赖性”,他们在其中将模型拟合到数据点上,如其中一张图中所述。我需要将其与我在论文中研究的 ODE 模型进行文献综述时发现的一些数据相匹配。但是,无论我做什么,我都无法使用 curvefit() 函数来拟合它,即使我的猜测 p0 非常接近。下面是我的代码和我的拟合图,当时我只是猜测拟合的参数 a、p 和 q,直到我得到一个非常接近的拟合。
k = 0.00008617
def NormalizeData(data):
return (data - np.min(data)) / (np.max(data) - np.min(data))
def C_to_A(C):
return -1/(k*(C+273))
def model(x, a, p,q):
return a*np.exp(p*x+q*x**2)
# Input data
x = C_to_A(np.array([11, 11, 11,15,15,15,20,20,20,25,25,25,29,29,29]))
y = NormalizeData(np.array([2.048, 1.56, 1.18, 2.6116,2.35,2.1036,2.97, 2.97, 2.97, 2.463,2.05,1.6679,1.825,1.0939,0.534]))
# do the fit with some initial values
popt, pcov = curve_fit(model, x, y, p0=(9.7*10**-139.95, -16, -0.2))
# prepare some data for a plot
xx = np.linspace(-60, 0)
yy = model(xx, *popt)
plt.plot(x, y, 'o', xx, yy)
plt.title('Exponential Fit')
plt.ylim(0,1.1)
plt.xlim(-50,32)
plt.grid()
plt.show()
print(popt)
如果我只是用数据点和我猜到的系数a=9.7*10**-139.95, p=-16, q=-0.2 绘制模型,我会得到下面的图片
这与我想要的非常接近。关于如何使用我提到的模型来接近这种拟合的任何建议?任何事情都会有帮助!
【问题讨论】:
-
您忘记在代码中定义
k。 -
@KotaMori 抱歉,这里的 k = 0.00008617。我也编辑了我的帖子。
标签: python curve-fitting curve data-fitting model-fitting