【发布时间】:2018-02-06 20:52:59
【问题描述】:
我对 python 和曲线拟合很陌生,目前我正在尝试用高斯拟合下图
我正在关注this tutorial,我的代码如下所示
import numpy as np
import matplotlib.pyplot as plt
from pylab import genfromtxt
from matplotlib import pyplot
from numpy import sqrt, pi, exp, linspace,loadtxt
from lmfit import Model
def gaussian(x,amp,cen,wid):
"1-d gaussian: gaussian(x,amp,cen,wid)"
return (amp/(sqrt(2*pi)*wid))*exp(-(x-cen)**2/(2*wid**2))
filelist=[]
time=[0.00,-1.33,-2.67,-4.00,-5.33,-6.67,1.13,2.67,4.00,5.33,6.67]
index=0
offset=0
filelist.append('0.asc')
for i in range(1,6):
filelist.append("-%s00.asc" %(i))
for i in range(1,6):
filelist.append("+%s00.asc" %(i))
sfgpeaks=[]
for fname in filelist:
data=np.genfromtxt(fname,delimiter=',',unpack=True,skip_footer=20)
SFGX=data[0,500:530]
SFGY=data[1,500:530]
SFGpeakY=np.max(SFGY)
sfgpeaks.append(SFGpeakY)
gmodel = Model(gaussian)
result = gmodel.fit(SFGpeakY, x=time[index], amp=5,cen=5,wid=3)
plt.plot(time[index],sfgpeaks[index],'ro')
plt.plot(time[index],result.init_fit, 'k--',label="Gaussian Fit")
plt.xticks(time)
index=index+1
print(pump2SHGX)
pyplot.title("Time Delay-SFG peak")
plt.xlabel("Timedelay[ps]")
plt.ylabel("Counts[arb.unit]")
plt.savefig("796and804nmtimesfg")
plt.legend(bbox_to_anchor=(1.0,0.5))
plt.show()
但是,当我尝试将我拥有的数据(时间延迟和上图的 Y 值)添加到高斯参数中时,我遇到了错误。 我得到的错误是这个
TypeError:输入不正确:N=3 不得超过 M=1
这个错误是因为我试图从一个数组中插入一个值到参数中吗??
非常感谢任何帮助。
【问题讨论】:
-
请添加回溯 - 哪里出现错误?
-
抱歉,这是“阅读错误信息”问题之一。您想将三个参数拟合到一个单点。注意
SFGpeakY=np.max(SFGY)只是一个值,因此M=1 -
我的印象是你要拟合的数据是由所有文件组成的,所以你需要先做这个数据集,并且拟合一定不能在那个循环里面。
-
感谢您的评论!当我在循环外进行拟合时,它起作用了!
标签: python curve-fitting