from lmfit.models import LorentzianModel
y1=data1['Quad'].to_numpy()
x1=data1['Time'].to_numpy()
mod = LorentzianModel()
pars = mod.guess(y1, x=x1)
out = mod.fit(y1, pars, x=x1)
data1['loren'] = out.best_fit
fig, ax = plt.subplots()
sns.lineplot(data=data1, x='Time', y='loren')
sns.lineplot(data=data1, x='Time', y='Quad')
print(out.fit_report(min_correl=0.25))
[[Model]]
Model(lorentzian)
[[Fit Statistics]]
# fitting method = leastsq
# function evals = 53
# data points = 100002
# variables = 3
chi-square = 96.1832913
reduced chi-square = 9.6184e-04
Akaike info crit = -694676.874
Bayesian info crit = -694648.335
[[Variables]]
amplitude: 1.46817906 +/- 0.00109243 (0.07%) (init = 1)
center: 2.71093691 +/- 7.0753e-04 (0.03%) (init = 4)
sigma: 0.96265066 +/- 0.00101433 (0.11%) (init = 0.1)
fwhm: 1.92530131 +/- 0.00202866 (0.11%) == '2.0000000*sigma'
height: 0.48546783 +/- 3.5777e-04 (0.07%) ==
'0.3183099*amplitude/max(2.220446049250313e-16, sigma)'
[[Correlations]] (unreported correlations are < 0.250)
C(amplitude, sigma) = 0.715
Когда я подбираю лоренцеву подгонку с помощью библиотеки lmfit, она не подходит правильно, не совсем перекрывая. В результате ширина становится шире и отклоняется от реального результата. Тем не менее, хорошая посадка Лоренца должна соответствовать, как на втором рисунке. Как я могу играть с параметрами и настройками lmfit, чтобы лучше соответствовать? (например: настройка сигмы, изменение веса или другие параметры)
Лоренцево подходит с использованием кода, не подходит хорошее
Хорошее соответствие должно быть этот показатель