Подгонка сплюснутой гауссовой модели к заданным данным - PullRequest
2 голосов
/ 21 апреля 2019

Я пытаюсь приспособить очень сложную (сплющенную гауссову) модель к полученным мной данным Изображение для сплюснутой формулы Гаусса (переменная fc в моем коде здесь представляет vo, центральную частоту.)

Я написал код на python, используя scipy.optimize import curve_fit. Он не может оптимизировать мое уравнение и всегда дает одинаковые ответы для параметров. Ссылка на файл данных: https://www.filehosting.org/file/details/795968/my-file.dat

import numpy as np
from scipy.optimize import curve_fit

x    = np.loadtxt("my-file.dat")[:,0]
yres = np.loadtxt("my-file.dat")[:,1]
def flatgauss(x, A,fc,t,w):
    B= ((4*(x-fc)**2)/ w**2 ) * np.log((-1/t)*np.log((1+ np.exp(-t))/2))
    return -A*( (1-np.exp(-t*np.exp(B)))/ (1-np.exp(-t)) )
popt, pcov = curve_fit(flatgauss, x, yres)
print ("fitted parameters:", popt)

Вот что я получаю: OptimizeWarning: ковариация параметров не может быть оценена категория = OptimizeWarning) подогнанные параметры: [1. 1. 1. 1.]

Пожалуйста, помогите мне с установкой, используя scipy или любой другой модуль, который вы считаете хорошим. (как ведущий)

1 Ответ

1 голос
/ 21 апреля 2019

Все начальные оценки параметров по умолчанию для подпрограммы Scipy's Curve_fit равны 1,0, и, поскольку улучшение этих оценок невозможно, они были возвращены с предоставлением «подходящих параметров: [1. 1. 1. 1.]». Если вы посмотрите на диаграмму рассеяния данных, как показано ниже, опубликованные данные не лежат на сглаженном пике Гаусса - или на любом другом уравнении преака - так что curve_fit не сработает с уравнением, которое вы использовали.

plot

...