Подгонка логистической кривой под ограничение, что f(0) == min(ydata)

#python #curve-fitting

Вопрос:

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

 def func(x, U, L, k, x0):
    return L   (U - L) / (1   np.exp(-k*(x - x0)))
 

где U верхняя асимптота, L нижняя асимптота, k максимальная скорость роста и x0 x-местоположение максимальной скорости роста.

Хотя я могу установить жесткие ограничения на то, какие значения L и U могут принимать (с помощью bounds аргумента to scipy.optimize.curve_fit ), я не могу контролировать, при каком значении x функция достигает этих значений. См., например, это:

введите описание изображения здесь

Я понимаю, что приведенная выше логистическая функция не в состоянии должным образом описать асимметрию здесь (и у меня есть более продвинутые модели с большим количеством параметров, которые работают довольно хорошо). Тем не менее, мне интересно посмотреть, как выглядит подогнанная кривая, если я смогу наложить ограничение, которое f(0) = min(ydata) . Очевидно, что подгонка будет хуже из-за дополнительного ограничения, но давайте не будем обращать на это внимания.

Есть ли способ наложить такие ограничения с помощью`scipy»?