lmfit: ограничение параметров по отношению к другим - PullRequest
0 голосов
/ 25 января 2020

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

Мне не хватает идеи о том, как включить в систему мое третье условие. Можете ли вы предложить еще одно выражение?

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

Ответы [ 2 ]

0 голосов
/ 25 января 2020

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

-b < a < 1

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

0 < a+b < 1+b

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

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

0 голосов
/ 25 января 2020

Решение довольно простое, и мне следовало бы только лучше прочитать руководство 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.')
...