繁体   English   中英

如何找到拟合高斯曲线的峰值?

[英]How do I find the peak of a fitted Gaussian curve?

所以我已经为一些非常嘈杂的数据拟合了高斯曲线。 我想知道如何找到高斯线峰值的坐标?

def fit_func(x,a,mu,sig,m,c):
            gauss = a*sp.exp(-(x-mu)**2/(2*sig**2))
            line = m*x+c
            return gauss + line            
        
        initial_guess=[160,mean,sd,2,100]
        po,po_cov=sp.optimize.curve_fit(fit_func,x,y,initial_guess)

这是我用来拟合高斯的代码。 我需要添加更多吗? 或者只是别的什么?

对于正态分布,峰值将位于均值处,因此峰值坐标将是 (mu, a) 对于像gauss = a*exp(-(x-mu)**2/(2*sig**2)) ) 这样的表达式gauss = a*exp(-(x-mu)**2/(2*sig**2)) 对于您的情况,您还添加了线性 function,因此全局最大值将处于正无穷大或负无穷大。 在高斯分布的平均值附近也会有一个局部最大值,你可以找到一个解析表达式,取整个表达式的导数等于0。

因为你有一个拟合值的向量,你可以使用np.argmax来做到这一点。 在代码开头包含import numpy as np并使用:

fitted = fit_func(x,po[0],po[1],po[2],po[3],po[4]) # fitted curve
max_at = x[np.argmax(fitted)] # 125.0
plt.plot(x, fitted, label='Fit results')
plt.axvline(x = max_at, color='red')
plt.show()

在此处输入图像描述

显然,拟合曲线在 125.0 处达到其(局部)最大值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM