Параметры ограничения в LMFIT

У меня есть целевая функция, которая может учитывать несколько параметров (a, b, c, d,...) в зависимости от количества рассматриваемых наборов данных. Эти параметры связаны таким образом, что:

a+b+c+d +..+..<=1

Предположим, у меня есть a, b, c и d; поэтому a+b+c+d‹=дельта. Я определяю:

a+b ‹ дельта-c-d (я называю m=дельта-c-d)

params = Parameters()
params.add('a', value=0.5, min=0., max=1.)
params.add('m', value=0.5)
params.add('b', expr='m -a')

с m = delta -cd, поэтому c = delta-md (я определяю n = md)

params.add('n', value=0.5)
params.add('delta', value=0.5)
params.add('c', expr='delta-n')

Наконец, n=m-d ==›d=m-n

params.add('d', expr='m-n')

Это правильно? Как установить минимум и максимум для m, n и дельты?

Я следовал подсказкам, данным в ограничениях Python lmfit: a ‹ b ‹ c

Привет, Мануэль


person Manuel    schedule 23.06.2020    source источник


Ответы (1)


Думаю, это нормально. Вы можете установить минимальные/максимальные значения в выражении ограничения, как в случае

params.add('c', expr='delta-n', min=0, max=1)

Но я должен сказать, что (если я правильно понял ваш вопрос), я бы, вероятно, сделал это как

params = Parameters()
params.add('a', value=0.25, min=0, max=1)
params.add('b', value=0.25, min=0, max=1)
params.add('c', value=0.25, min=0, max=1)
params.add('delta', value=0.05, min=0, max=1)
params.add('d', expr='1-(a+b+c+delta)', min=0, max=1)

это кажется мне проще... если только вы не хотите знать значения ваших m и n....

person M Newville    schedule 24.06.2020
comment
Я пробовал так: params.add('c', expr='1-(a+b+delta)', min=0, max=1) --моя задача рассматривает три параметра-- но так как a, b являются свободными параметрами в [0,1], то получается a+b+c ›1. Кроме того, я пробовал params.add('b', expr='delta -a', min=0, max=1) и params.add('c', expr='delta -a- b', min=0, max=1); в этом случае a +b +c ‹ 1, но в большинстве случаев это означает, что b и c равны нулю. Поскольку у меня есть три параметра a, b и c, не уверен, что должен реализовать два ограничения (deltas)? Я что-то упускаю. - person Manuel; 08.07.2020