У меня есть набор данных с хорошим поведением, и я пытаюсь сопоставить этот набор данных с двумя гауссовскими установками. Мой код для установки этого набора данных:
from scipy import stats
from pylab import *
from scipy.optimize import curve_fit
from scipy.integrate import*
from lmfit import Model
data=concatenate((normal(1,.2,5000),normal(2,.2,2500)))
y,x,_=hist(data,100,alpha=.3,label='data')
x=(x[1:]+x[:-1])/2
def gaussian1(x, amp1, cen1, wid1):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp1/(sqrt(2*pi)*wid1)) * exp(-(x-cen1)**2 /(2*wid1**2))
def gaussian2(x, amp2, cen2, wid2):
"1-d gaussian: gaussian(x, amp, cen, wid)"
return (amp2/(sqrt(2*pi)*wid2)) * exp(-(x-cen2)**2 /(2*wid2**2))
gmodel = Model(gaussian1) + Model(gaussian2)
#pars = gmodel.make_params( amp1=20,cen1=1.0,wid1=0.2,amp2=10,cen2=2.0,wid2=0.19)
pars = gmodel.make_params(amp1=260,cen1=1.0,wid1=0.2,amp2=140,cen2=2.0,wid2=0.19)
result = gmodel.fit(y, pars, x=x)
print(result.fit_report())
#plt.plot(x, y, 'bo')
plt.plot(x, result.init_fit, 'k--',label='Initial Fit')
plt.plot(x, result.best_fit, 'r-',label='Best Fit')
plt.show()
Это возвращает приведенный ниже вывод и график:
[[Model]]
(Model(gaussian1) + Model(gaussian2))
[[Fit Statistics]]
# fitting method = leastsq
# function evals = 29
# data points = 100
# variables = 6
chi-square = 8297.41156
reduced chi-square = 88.2703358
Akaike info crit = 453.852870
Bayesian info crit = 469.483891
[[Variables]]
amp1: 122.899857 +/- 1.52937166 (1.24%) (init = 260)
cen1: 1.00027783 +/- 0.00288716 (0.29%) (init = 1)
wid1: 0.20129987 +/- 0.00290241 (1.44%) (init = 0.2)
amp2: 61.0231508 +/- 1.51470406 (2.48%) (init = 140)
cen2: 1.99916357 +/- 0.00564876 (0.28%) (init = 2)
wid2: 0.19744994 +/- 0.00567828 (2.88%) (init = 0.19)
[[Correlations]] (unreported correlations are < 0.100)
C(amp2, wid2) = 0.581
C(amp1, wid1) = 0.581
C(wid1, wid2) = -0.103
Сюжет для этой посадки выглядит прекрасно. Но проблема в том, что значения двух значений амплитуды amp1, amp2
не совпадают с показанными на графике:
По сюжету amp1=255
и amp2 = 125
Согласно напечатанным значениям amp1 = 122.89
и amp2 = 61.02
Другое дело, что он возвращает очень высокое значение хи-квадрат (например, 8297,41).
Пожалуйста, помогите мне исправить значение amp1, amp2
и значение хи-квадрат и решить эти проблемы.