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

Python中curve_fit拟合倒峰型数据效果不符预期,如何获得正确拟合结果?

拟合问题修复方案

问题根源

  • 你当前使用的指数二次模型本身可以生成倒峰形态,只要保证二次项系数q为负即可,模型定义没有错误。
  • 拟合结果不符合预期的核心原因是未给curve_fit()传入初始参数,函数默认使用全1作为初始值时容易陷入局部最优,无法得到正确的负q值解,最终输出单调抛物线形态的错误结果。

修复方案

  1. 手动传入合理的初始参数:根据你的数据分布,峰值y约为3,出现在x=20附近,可以预估初始参数为a≈3,一次项系数p为正,二次项系数q为负。
  2. 可适当缩小拟合绘图的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:39:03