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)
这对我来说似乎更简单......除非你确实想知道你的 m
和 n
的值......
我有一个 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)
这对我来说似乎更简单......除非你确实想知道你的 m
和 n
的值......