【发布时间】:2019-03-01 08:32:57
【问题描述】:
我正在尝试拟合具有多个吸收峰(穆斯堡尔光谱)的洛伦兹函数,但 curve_fit 函数无法正常工作,仅拟合几个峰。怎么装?
Figure: Trying to adjusting multi-Lorentzian
下面我展示了我的代码。请帮帮我。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
def mymodel_hema(x,a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5,a6,b6,c6):
f = 160000 - (c1*a1)/(c1+(x-b1)**2) - (c2*a2)/(c2+(x-b2)**2) - (c3*a3)/(c3+(x-b3)**2) - (c4*a4)/(c4+(x-b4)**2) - (c5*a5)/(c5+(x-b5)**2) - (c6*a6)/(c6+(x-b6)**2)
return f
def main():
abre = np.loadtxt('HEMAT_1.dat')
x = np.zeros(len(abre))
y = np.zeros(len(abre))
for i in range(len(abre)):
x[i] = abre[i,0]
y[i] = abre[i,1]
popt,pcov = curve_fit(mymodel_hema, x, y,maxfev=1000000000)
我的数据 --> https://drive.google.com/file/d/1LvCKNdv0oBza_TDwuyNwd29PgQv22VPA/view?usp=sharing
【问题讨论】:
-
我没有你的数据,但我确实有一个将双洛伦兹峰方程拟合到碳纳米管拉曼光谱的示例:bitbucket.org/zunzuncode/RamanSpectroscopyFit - 该示例使用 scipy 的差分进化遗传算法模块,该模块使用拉丁超立方体算法来确保对参数空间进行彻底搜索,这需要在其中搜索的参数范围 - 在示例代码中,这些范围是根据数据的最大值和最小值确定的。
-
请提供一些我们可以轻松复制粘贴的数据。
-
您好,我用我的数据编辑了我的问题。只需下载即可。
-
您是否也尝试过为参数提供初步猜测?这通常很有帮助。
标签: python curve-fitting