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

如何求取带线性本底的拟合高斯曲线的峰值坐标

解答

你不需要更换拟合方法,基于现有代码的输出即可算出峰值坐标,无需额外重复拟合流程。
你调用curve_fit得到的po数组参数顺序和你定义的fit_func入参顺序完全对应:po[0]为高斯幅度a、po[1]为高斯中心mu、po[2]为高斯标准差sig、po[3]为线性项斜率m、po[4]为线性项截距c,根据你的实际需求选择对应计算方式即可:

场景1:仅需要高斯分量本身的峰值位置

纯高斯分量的峰值x坐标就是高斯中心po[1],如果需要叠加线性项后该位置对应的总y值,可以直接代入计算:

# 高斯分量峰值x坐标
gauss_peak_x = po[1]
# 叠加线性项后该位置对应的总y值
gauss_peak_total_y = po[0] + po[3] * gauss_peak_x + po[4]

如果你的线性项斜率很小,这个结果和整个拟合曲线的实际峰值偏差可以忽略,直接使用即可。

场景2:需要叠加线性项后整个拟合曲线的精确峰值

因为叠加了线性项,总拟合曲线的峰值会和纯高斯中心有偏移,你可以用两种方法快速计算:

方法1:密集采样取最大值(简单易实现)

import scipy as sp
# 在原数据x范围内生成密集采样点,采样密度可根据精度需求调整
x_fit = sp.linspace(x.min(), x.max(), 1000)
y_fit = fit_func(x_fit, *po)
# 取y最大值对应的坐标
full_peak_x = x_fit[y_fit.argmax()]
full_peak_y = y_fit.max()

方法2:数值求解极值点(精度更高)

通过求解总拟合函数导数为0的点得到精确极值:

import scipy as sp
# 定义拟合后的总函数
def fitted_total(x):
    return fit_func(x, *po)
# 求函数最大值等价于求负函数的最小值
opt_result = sp.optimize.minimize_scalar(
    lambda x: -fitted_total(x),
    bounds=(x.min(), x.max()),
    method='bounded'
)
full_peak_x = opt_result.x
full_peak_y = fitted_total(full_peak_x)

内容的提问来源于stack exchange,提问作者gemini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:03