Я подгоняю сигмовидные уравнения к некоторым данным и заметил, что иногда большой кусок подобранной кривой имел отрицательные значения x. Так как для рассматриваемых данных это не имеет смысла, я ограничил его так, чтобы значение x в 0,01 было больше 0. Однако теперь я вижу разные результаты для данных, для которых это даже не было проблемой для начала. , Непринужденная подгонка была хорошей, но когда добавилось ограничение, подгонка явно хуже. Любые идеи о том, почему это может произойти?
import numpy as np
from lmfit import minimize, Parameters
def func(xdata, midpoint, slope):
return 1 / (1 + np.exp(-(xdata - midpoint) / slope))
def fit_fc(params, xdata, ydata):
slope = params['slope'].value
x0 = params['x0'].value
model = 1 / (1 + np.exp(-(xdata - (x0 + slope * np.log(99))) / slope))
return model - ydata
params = Parameters()
params.add('x0', x0_guess)
params.add('slope', slope_guess)
result = minimize(fit_fc, params, args=(xdata, ydata))
Приведенный выше код дает мне такой результат: Синяя линия соответствует кривой ![Blue line is the fitted curve](https://i.stack.imgur.com/DflIj.png)
Когда я изменяю его на params.add('x0', x0_guess, min=0)
, я получаю худшее соответствие, даже если ограничение уже выполнено.
Синяя линия - это подогнанная кривая ![Blue line is the fitted curve](https://i.stack.imgur.com/WPwaF.png)