gpt4 book ai didi

Python lmfit 约束 : a < b < c

转载 作者:行者123 更新时间:2023-12-03 20:25:33 26 4
gpt4 key购买 nike

我在 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')

仍然使用三个变量(ab_minus_ac_minus_b)并施加不等式约束,需要注意的是,差异实际上可能为 0。对于 float ,这通常就足够了,但根据变量的规模,您可以将 0 更改为类似 1.e-12 的内容。

关于Python lmfit 约束 : a < b < c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49931455/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com