2015-02-13 2 views
0

Задача состоит в том, чтобы установить некоторые фрагменты (cand_peaks_xs) диапазона данных (X и Y) с гауссовой кривой. Проблема в том, что результат является линейным.python curve_fit возвращает строки

for i in cand_peaks_xs: 
       # approximate gauss 
       x = X[i[0]:i[1]] 
       y = Y[i[0]:i[1]] 
       try: 
        mean = numpy.mean(x) 
        sigma = numpy.std(x) 
        param, cov = curve_fit(self.gauss, x, y, p0=[y.max(), mean, sigma]) 
        self.ax1.plot(x, self.gauss(x, *param), c='r') 
       except: 
        pass 

The result of work. Red lines are curves, built with the algorithm Красные линии здесь, что я получаю с этой программой.

Это определение Гс

def gauss(self, x, a, x0, sigma): 
    return a*exp(-(x-x0)**2/(2*sigma**2)) 
+0

Как бы вы определили 'self.gauss'? – Ffisegydd

+0

Кроме того, как и в сторону, похоже, что вы делаете какой-то дифракционный анализ. Возможно, уточнение Rietveld или такое? Вы можете быть заинтересованы в http://www.diffpy.org/, это пакет Python, предназначенный для выполнения дифракционного анализа (игнорируйте меня, если я ошибаюсь: P) – Ffisegydd

+0

Я добавил определение. Как насчет вашего совета, я посмотрю, спасибо – Leonid

ответ

0
def gauss(self, x, a, x0, sigma): 
    return a*numpy.exp(-(x-x0)**2/(2*sigma**2)) 
Смежные вопросы