我在用lmfit
在Python中拟合一些数据,其中包括拟合变量a、b和c。我需要确保 a http://cars9.uchicago.edu/software/python/lmfit_MinimizerResult/constraints.html其中讨论了需要将约束定义为不等式并设置虚拟变量。例如,如果我想要 a + b
pars.add('a', value = 5, vary=True)
pars.add('delta', value = 5, max=10, vary=True)
pars.add('b', expr='delta-a')
这将确保 a + b
我想我需要 c - b > 0 和 b - a > 0 (或者 a - b
按照您链接到的文档的提示,不等式约束为x > y
应该翻译成x = y + something
where 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
, and c_minus_b
)并施加不等式约束,但需要注意的是差异实际上可能为 0。对于浮点数,这通常就足够了,但根据变量的规模,您可以将 0 更改为类似的值1.e-12
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)