lmfit: ограничивающие параметры по отношению к другим параметрам

У меня проблемы с установкой минимального и максимального значений параметра, который нужно установить в lmfit. По сути, у меня есть два параметра a и b, которые должны подчиняться следующим ограничениям:

0 < b < 1
0 < a+b < 1
-b < a < 1

Первые два довольно легко реализовать как:

fit_params.add('b', min = 0, max = 1)
fit_params.add('a_plus_b', min = 0, max = 1)
fit_params.add('a', expr = 'a_plus_b-b')

Я сейчас не понимаю, как включить в систему мое третье условие. Вы можете предложить другое выражение?

Большое спасибо, Лео


person leonardo2887    schedule 25.01.2020    source источник


Ответы (2)


Решение довольно простое, и мне нужно было лучше прочитать руководство по lmfit здесь: https://lmfit.github.io/lmfit-py/constraints.html

В любом случае, пытаясь быть полезным, решение дается путем реализации предложения if в выражении параметра.

fit_params.add('b', min = 0, max = 1)
fit_params.add('a_plus_b', min = 0, max = 1)
fit_params.add('a', expr = 'a_plus_b-b if a_plus_b-b > 0 else 0.')
person leonardo2887    schedule 25.01.2020

Я думаю, что здесь вам не нужно ваше третье условие, так как

-b < a < 1

можно переписать как

0 < a+b < 1+b

но начиная с b>0, это условие всегда будет выполняться с 0 < a+b < 1.

Но, чтобы ответить на вопрос в более общем плане, вам, вероятно, потребуется ввести еще одну «переменную разности или суммы», как вы это сделали с a_plus_b, и использовать ее.

person M Newville    schedule 25.01.2020