У меня есть набор точек данных, которые в соответствии с моделью, которую я хочу реализовать, могут быть смоделированы с определенной кривой (в данном случае произведение между экспоненциальной и дополнительной функцией ошибок).
Для подгонки этих данных в такую кривую я попытался:
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
появляется в виде числителя и знаменателя в другой части выражения.Есть идеи?Заранее спасибо!