Python: добавление ограничения в lmfit.minimize изменяет результат, даже если ограничение уже выполнено - PullRequest
0 голосов
/ 06 марта 2020

Я подгоняю сигмовидные уравнения к некоторым данным и заметил, что иногда большой кусок подобранной кривой имел отрицательные значения 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

Когда я изменяю его на params.add('x0', x0_guess, min=0), я получаю худшее соответствие, даже если ограничение уже выполнено.

Синяя линия - это подогнанная кривая Blue line is the fitted curve

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