Python中curve_fit拟合倒峰型数据效果不符预期,如何获得正确拟合结果?
拟合问题修复方案
问题根源
- 你当前使用的指数二次模型本身可以生成倒峰形态,只要保证二次项系数
q为负即可,模型定义没有错误。 - 拟合结果不符合预期的核心原因是未给
curve_fit()传入初始参数,函数默认使用全1作为初始值时容易陷入局部最优,无法得到正确的负q值解,最终输出单调抛物线形态的错误结果。
修复方案
- 手动传入合理的初始参数:根据你的数据分布,峰值y约为3,出现在x=20附近,可以预估初始参数为a≈3,一次项系数p为正,二次项系数q为负。
- 可适当缩小拟合绘图的x范围,匹配数据分布区间,避免展示无数据支撑的外推结果。
修改后可运行代码
import numpy as np from scipy.optimize import curve_fit import matplotlib.pyplot as plt def model(x, a, p,q): return a*np.exp(p*x+q*x**2) # 输入数据 x = np.array([11, 11, 11,15,15,15,20,20,20,25,25,25,29,29,29]) y = 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]) # 拟合操作:传入初始参数p0 popt, pcov = curve_fit(model, x, y, p0=[3, 0.2, -0.01]) # 生成绘图数据 xx = np.linspace(10, 30, 100) yy = model(xx, *popt) plt.plot(x, y, 'o', xx, yy) plt.title('Exponential Fit') plt.ylim(0,5) plt.xlim(10,30) plt.grid() plt.show() print(popt)
运行后得到的拟合参数中二次项q为负值,拟合曲线会呈现和数据分布匹配的倒峰形态,峰值落在x=20附近和实际数据一致。
内容的提问来源于stack exchange,提问作者Rami2314
相关产品推荐
相关产品推荐

