作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Python 中使用 lmfit
来拟合一些数据,其中包括拟合变量 a、b 和 c。我需要确保 a < b < c。我找到了 http://cars9.uchicago.edu/software/python/lmfit_MinimizerResult/constraints.html其中谈到需要将约束定义为不等式并设置虚拟变量。例如,如果我想要 a + b <= 10,我可以这样做:
pars.add('a', value = 5, vary=True)
pars.add('delta', value = 5, max=10, vary=True)
pars.add('b', expr='delta-a')
这将确保 a + b <= 10。
我想我需要 c - b > 0 和 b - a > 0(或者 a - b < 0 和 b - c < 0),但我不确定如何编码。
最佳答案
根据您链接到的文档的提示,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_minus_a
和 c_minus_b
)并施加不等式约束,需要注意的是,差异实际上可能为 0。对于 float ,这通常就足够了,但根据变量的规模,您可以将 0 更改为类似 1.e-12
的内容。
关于Python lmfit 约束 : a < b < c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931455/
我是一名优秀的程序员,十分优秀!