Проблема при подгонке набора точек данных к произвольной кривой с помощью Scipy - PullRequest
3 голосов
/ 01 июля 2019

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

Для подгонки этих данных в такую ​​кривую я попытался:

import numpy as np
from scipy.optimize import curve_fit
from scipy import special

x_fit = np.linspace(0,1,1000)
def fitted_function(x_fit, c, d, S):
    return c*np.exp(((S*d/2)**2)-x_fit*d)*special.erfc(S*d/2-x_fit/S)
FitParameters, FitCovariance = curve_fit(fitted_function, x_data, y_data, maxfev = 100000)

Это не дает мне какой-либо конкретной ошибки, но результат подбора, очевидно, неверен.Я сильно подозреваю, что это связано с деталью x_fit/S, где параметр подгонки S отображается как знаменатель.

Например, я сталкиваюсь с той же проблемой при подгонке простой экспоненты: если яопределить подгоночную кривую с помощью

    return a*np.exp(-x_fit/b)

с a, b подгоночными параметрами;поскольку параметр подгонки b отображается как знаменатель, я нахожу ту же проблему (т. е. получающаяся подгоночная кривая по какой-то причине является горизонтальной линией).В случае простой экспоненты я могу просто обойти это, выполнив

    return a*np.exp(-b*x_fit)

, так что b больше не является знаменателем, а подобранная кривая действительно является экспоненциальной кривой.Вместо этого в моем текущем случае я не могу этого сделать, поскольку S появляется в виде числителя и знаменателя в другой части выражения.Есть идеи?Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...