Multi Gaussian Fit (оценочный параметр) с питоном - PullRequest
0 голосов
/ 25 декабря 2018

Это мои данные .

Я пытаюсь подобрать мои данные с помощью scipy и кривой подгонки, вот мой код:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import pandas as pd

df=pd.read_csv("dene2.dat", sep=" ")

x=df.x
y=df.y

n = len(x)                       
mean = sum(x * y) / sum(y)
sigma = np.sqrt(sum(y * (x - mean)**2) / sum(y))   

def gaus(x,a,x0,sigma):
    return a*exp(-(x-x0)**2/(2*sigma**2))

popt,pcov = curve_fit(gaus,x,y,p0=[1,mean,sigma])

plt.plot(x,y,'b+:',label='data')
plt.plot(x,gaus(x,*popt),'ro:',label='fit')
plt.legend()
plt.title('Fig. 3 - Fit for Time Constant')
plt.xlabel('Time (s)')
plt.ylabel('Intensity (Counts)')

plt.show()

ПодгонкаГауссовский график также оказался не таким, как ожидалось;не могли бы вы помочь мне?

1 Ответ

0 голосов
/ 25 декабря 2018

Вы можете использовать суперпозицию двух гауссиан, чтобы получить лучшую подгонку.

def gaus(x,a,x0,sigma, b, x1, sigma1):
    return a*exp(-(x-x0)**2/(2*sigma**2)) + b*exp(-(x-x1)**2/(2*sigma1**2))

popt,pcov = curve_fit(gaus,x,y,p0=[1.6, 380, 10, 1.5, 690, 10])

Здесь 1.6, 380, 10, 1.5, 690, 10 - приблизительные начальные предположения для высоты, среднего значения и ширины для первого и второго четкого пика вdata.

Вы можете попробовать использовать трех гауссиан, чтобы получить лучшую подгонку. Здесь - один похожий пост.

enter image description here

...