各位大佬,请教一下关于python画图进行高斯多峰拟合的问题

z201761101445 2018-05-23 11:09:13
“”“我想读取一个数据文件(PL.txt),画出图,然后对图中非对称的峰进行两个峰的高斯拟合,但是运行的结果是无法找到符合条件的两个高斯函数,但是我用origin画图是可以较容易的找到拟合峰的。至今没有找到解决方法,求各位大佬帮帮忙”“”

# main
import numpy as np
import matplotlib.pyplot as plt
import sys
import math
from scipy.optimize import curve_fit

f=open("PL.txt","r")
line=f.readlines()
i=0
x_data=[]
y_data=[]

while i<len(line):
x=float(line[i].split()[0])
y=float(line[i].split()[1])
if (x>=500) & (x<=575): #delet later
x_data.append(x)
y_data.append(y)
else:
pass
i=i+1

#plt.plot(x_data,y_data,"b-")

def gauss_fitting(x,A1,b1,w1,d1,A2,b2,w2,d2):
y1=(A1/(w1*math.sqrt(math.pi/2)))*np.exp(-2*((x-b1)/w1)**2)+d1
y2=(A2/(w2*math.sqrt(math.pi/2)))*np.exp(-2*((x-b2)/w2)**2)+d2
return y1+y2

'''
def gauss(x,A,b,w,d): # something wrong in the similar case
y=(A/(w*math.sqrt(math.pi/2)))*np.exp(-2*((x-b)/w)**2)+d
return y
'''
popt,pcov=curve_fit(gauss_fitting,x_data,y_data,p0=[450000,530,8,0,600000,530,22,0],
bounds=([0,min(x_data),0,0,0,min(x_data),0,0],
[None,max(x_data),100,max(y_data),None,max(x_data),100,max(y_data)]))
x_fit=np.linspace(min(x_data),max(x_data),10000)
print(popt)
x=np.array(x_fit)
y1=(popt[0]/(popt[2]*math.sqrt(math.pi/2)))*np.exp(-2*((x-popt[1])/popt[2])**2)+popt[3]
y2=(popt[4]/(popt[6]*math.sqrt(math.pi/2)))*np.exp(-2*((x-popt[5])/popt[6])**2)+popt[7]
plt.plot(x,y1,"r--")
#plt.plot(x,y2,"")
plt.show()
...全文
1182 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
豆饼 2019-05-18
  • 打赏
  • 举报
回复
把PL文档贴上来。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧