我试图拟合一个有多个吸收峰的洛伦兹函数(穆斯堡尔谱),但曲线拟合函数不能正常工作,只拟合了几个峰。我怎么才能装呢?在
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
这段代码使用},因为后者需要固定数量的参数。这里我不想这样,因为我让代码“决定”有多少个峰值。请注意,我简化了数据的比例。真正的拟合参数很容易按比例缩小(和标准误差传播)
leastsq
,而不是{提供
^{pr2}$以及
相关问题 更多 >
编程相关推荐