LMFIT 中的约束参数

Constraint parameters in LMFIT

我有一个 objective 函数,它可以考虑一些参数(a、b、c、d、...),具体取决于所考虑的数据集的数量。这些参数的绑定方式是:

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

假设我有a、b、c和d;所以 a+b+c+d<=delta。我定义:

a+b < delta-c-d (我称m=delta-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')

with m=delta -c-d, so c= delta-m-d (我定义n=m​​-d)

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 和 delta 的最小值和最大值?

我遵循了

上给出的提示

干杯, 曼纽尔

我想没关系。您可以在约束表达式上设置 min/max 值,如

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)

这对我来说似乎更简单......除非你确实想知道你的 mn 的值......