You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多峰氢脱附数据拟合优化:如何提升第三峰Lognormal拟合效果?

氢脱附峰拟合优化问题

我有一组氢脱附随温度变化的数据,包含4个峰:
Hydrogen vs Temperature

我希望为每个峰拟合分布曲线以提取峰下面积等信息,其中第1、2、4峰适合用Gaussian拟合,拟合效果如下:
Gaussian fittings

现有拟合代码

我使用以下两段代码分别获取初始参数和定义最终参数:

拟合过程(获取初始参数)

# Fitting procedure

def fitting_procedure(xdata, ydata):
    
    # fitting function
    def func(xdata, a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4):     #
        return a1 * np.exp(-0.5*(((xdata-b1)**2)/(c1**2)))+ \
               a2 * np.exp(-0.5*(((xdata-b2)**2)/(c2**2)))+ \
               a3 * np.exp(-0.5*(((xdata-b3)**2)/(c3**2)))+ \
               a4 * np.exp(-0.5*(((xdata-b4)**2)/(c4**2)))
        
#     p0 = [0.002, 505, 1, 0.002, 780, 1, 0.002, 725, 1, 0.002, 975, 1] # for file 01    
#     p0 = [0.002, 510, 1, 0.002, 650, 1, 0.002, 740, 1, 0.002, 840, 1]
    p0 = [0.002, 570, 1, 0.002, 668, 1, 0.002, 800, 1, 0.002, 820, 1]

    bounds = ((0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.),
             (np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf,np.inf))

    cons, pcov = curve_fit(func, xdata, ydata, p0, bounds=bounds, maxfev=1000000)
    
    return (cons)

最终参数定义

def gas(y0,A,w,xc):
    return y0 + (A/(w*math.sqrt(math.pi/2)))*np.exp(-2*((x-xc)/w)**2) 

第3峰拟合困境

我认为第3峰更适合用Lognormal拟合,但始终无法得到理想的拟合结果,相关代码如下:

model = models.LognormalModel()
params = model.make_params(center=20, sigma=3, amplitude=5)

result = model.fit(y14-0.003, params, x=x14)
# print(result.fit_report())

plt.plot(x14, y14-0.003, label='3rd peak')
plt.plot(x14, result.best_fit, label='fit')
# plt.plot(x14_fit, y14_fit, label='fit2')
plt.xlabel('Temperature, K', fontsize=12)
plt.ylabel('HDR, at.ppm/s', fontsize=12)
plt.legend()
plt.show()

当前第3峰的Lognormal拟合效果:
Lognormal fitting - 3rd peak

整体拟合效果:
Total fittings

请问如何改进拟合效果,尤其是第3峰的Lognormal拟合?


内容的提问来源于stack exchange,提问作者Maria Inês

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:35:21