一、高斯函数:
a表示得到曲线的高度,b是指曲线在x轴的中心,c指width(与半峰全宽有关),图形如下:
高斯拟合(Gaussian Fitting)即使用形如:
Gi(x)=Ai*exp((x-Bi)2/Ci2)
的高斯函数对数据点集进行函数逼近的拟合方法。
其实可以跟多项式拟合类比起来,不同的是多项式拟合是用幂函数系,
而高斯拟合是用高斯函数系。
使用高斯函数来进行拟合,优点在于计算积分十分简单快捷。
二、多高斯拟合
import numpy as np
import pylab as plt
#import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
x = ar(range(10))
y = ar([0,1,2,3,4,5,4,3,2,1])
def gaussian(x,*param):
return param[0]*np.exp(-np.power(x - param[2], 2.) / (2 * np.power(param[4], 2.)))+\
param[1]*np.exp(-np.power(x - param[3], 2.) / (2 * np.power(param[5], 2.)))
popt,pcov = curve_fit(gaussian,x,y,p0=[3,4,3,6,1,1])
print popt
print pcov
plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaussian(x,*popt),'ro:',label='fit')
plt.legend()
plt.show()
运行结果:
[ 4.68035609 0.36961389 4.94329154 8.34528036 2.13310944 0.67913747]
[[ 0.03858998 0.02308755 -0.00386378 0.01181436 -0.0162972 -0.00306613]
[ 0.02308755 0.22679753 -0.04375697 -0.0531039 -0.05173268 0.00435262]
[-0.00386378 -0.04375697 0.04252537 0.11052757 0.03062613 -0.24351661]
[ 0.01181436 -0.0531039 0.11052757 0.81824277 0.08714636 -0.87927837]
[-0.0162972 -0.05173268 0.03062613 0.08714636 0.03972189 -0.20849818]
[-0.00306613 0.00435262 -0.24351661 -0.87927837 -0.20849818 2.47203996]]
参考博客:
https://blog.csdn.net/zhangap123/article/details/76673689