Python-lmfit约束:a<;b<;C

Python-lmfit约束:a<;b<;C,python,constraints,least-squares,lmfit,Python,Constraints,Least Squares,Lmfit,我在Python中使用lmfit来拟合一些数据,包括拟合变量a、b和c。我需要确保a

我在Python中使用
lmfit
来拟合一些数据,包括拟合变量a、b和c。我需要确保a根据您链接到的文档的提示,
x>y
的不等式约束应转换为
x=y+something
,其中
something
的下限为0

因此,两次应用该方法,我认为这应该满足您的要求:

from lmfit import Parameters
params = Parameters()
params.add('a', value=5, vary=True)
params.add('b_minus_a', value=1,  vary=True, min=0)
params.add('c_minus_b', value=1,  vary=True, min=0)
params.add('b', expr='a + b_minus_a')
params.add('c', expr='b + c_minus_b')

这仍然使用了三个变量(
a
b_-a
,和
c_-b
),并施加了不等式约束,但需要注意的是,差异实际上可能是0。对于浮点数,这通常就足够了,但根据变量的大小,可以将0更改为类似
1的值。e-12

实际上是您想要得到的结果,或者您需要严格要求才能使用此LMFIT?我不一定需要使用LMFIT,但是我需要用最小二乘法来拟合我的数据。啊,是的,这很有意义。明天早上,当我回到我的常规计算机时,我会尝试一下。我有一个类似的情况,除了只需要将1个参数绑定为小于另一个参数外,例如b<0.2*a,但否则b应该可以自由变化,但它似乎被锁定为正是0.2*a,在这里我设置了
params.add(name=“b”,expr='0.2*a+b_减去a')
,是因为我的配件实际上只是希望b更高,所以它会像以前一样撞到天花板,还是它实际上被限制在该值?不管乘数是多少,情况似乎都是这样,所以我怀疑它已经达到了你提到的警告。我能强迫它去探索更多吗?
from lmfit import Parameters
params = Parameters()
params.add('a', value=5, vary=True)
params.add('b_minus_a', value=1,  vary=True, min=0)
params.add('c_minus_b', value=1,  vary=True, min=0)
params.add('b', expr='a + b_minus_a')
params.add('c', expr='b + c_minus_b')