0
我正在尝试使用LMFIT库进行多洛伦兹拟合,但它不工作,我甚至明白我所做的是完全错误的语法,但我没有任何新的想法。使用LMFIT为DataSet拟合多峰函数
我的问题是这样的:我有一个很长的光谱,有多组 峰,但是这些组中峰的数目并不是恒定的,所以有时候我只会有1个峰,但有时我可能有8个峰 甚至20
#function definition:
def Lorentzian(x, amp, cen, wid, n):
f = 0
for i in range(int(n)):
"lorentzian function: wid = half-width at half-max"
f += (amp[i]/(1 + ((x-cen[i])/wid[i])**2))
return f
#library import and model definition:
import lmfit as lf
lmodel = lf.Model(Lorentzian)
#The initial parameters for the model:
peaks_in_interval = np.array([2378, 2493, 2525, 2630, 2769])
number_of_peaks = len(peaks_in_interval)
amplitude = width = np.zeros(number_of_peaks) + 1
center = x[peaks_in_interval]
params = lmodel.make_params(x = x, amp = amplitude, cen = center, wid = width, n = number_of_peaks)
#This is the line that doesn't work:
result = lmodel.fit(y, params, x = x)
我已经开始试图让一个返回 多洛伦兹的通用功能,但我在如何使这项工作挣扎......
我m也发送x,y数组的数据。
This is what the DataSet of x and y looks like.
非常感谢。 如果好奇,我使用peakutils.baseline模块在该区间中创建平均基线。它使n阶多项式拟合基线(通常我使用n = 2)。 –