使用lmfit向我的拟合模型添加约束



我想用lmfit来拟合一个模型。模型有两个参数c和c1。对于这些参数,我有3个约束(0<=c<=1) (-1<=c1<=0)和(1+c1-c>0)。如何将这些约束合并到我的模型中?

我正在尝试以下方法:

params = lmfit.Parameters()
params.add("c1", value = -0.5, min = -1, max = 0)
params.add("constraint", value = 0.5, min = 0, max = 1)
params.add("c", expr = "1+c1-constraint", min = 0, max = 1)

在这里,我们遵循了c1和1+c1-c的约束,但是在拟合中没有遵循c的约束。只要不满足约束条件,c的输出就等于0,这在我的拟合中产生了问题。我该怎么办?

我可能会把它写成

params = lmfit.Parameters()
params.add("c1", value=0, min=-1, max=0) # (-1<=c1<=0) 
params.add("delta", value=0.5, min=0)   # (1+c1+delta = c, delta>0)
params.add("c", expr="1+c1+delta", min=0, max=1) # (0<=c<=1)

你觉得对吗?

最新更新