lmfit с python lorenzian не подходит должным образом. как установить параметры, чтобы соответствовать лучше - PullRequest
0 голосов
/ 10 января 2020
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, чтобы лучше соответствовать? (например: настройка сигмы, изменение веса или другие параметры)

Лоренцево подходит с использованием кода, не подходит хорошее

Хорошее соответствие должно быть этот показатель

...