Глобальное соответствие с ограничениями на параметры в отношении переменных в lmfit - PullRequest
0 голосов
/ 22 апреля 2020

Я видел, как это спрашивали пару раз раньше. Но для этого примера я не смог реализовать описанные методы: здесь и здесь . Я не знаю, в этом ли моя вина или что это не так. Поехали.

Простая версия функции, которую я пытаюсь установить: y = (1-(x/chi)**beta)**(1/beta) (1) где chi = xi*(k**alpha). Где x и y - переменные, а chi, k, xi, beta, alpha - параметры.

Теперь (1), конечно, дает значения NaN, когда x / chi > 1. Мои вопросы: как я могу реализовать такого рода ограничение на то, что chi будет больше x для каждого x? В данных значения x строго возрастают, скажем, [0.1, 0.15, 0.2, 0.3, 0.5]. Одна из идей, которые я придумал, - присвоить параметру x_max наибольшее значение x для каждой подгонки. Но я не могу подключить этот параметр к alpha. Мой код:

def model(x, k, alpha, beta, xi):
     chi = xi*(k**alpha)
     y = (1 - (x/chi_fit)**beta)**(1/beta)
     return y

params = Parameters()
params.add('k', value=5, vary=False)
params.add('beta', value=1.16, min=1.1, max=1.2)
params.add('xi', value=1.3, min = 1.1, max=1.5)
params.add('x_max', value = max(x[i]), max=10, vary=True)
params.add('alpha', expr = '')

Любая помощь очень ценится.

...