如何基于另一个参数绑定 lmfit 参数,使得 param1 < 0.5*param2



我试图遵循lmfit文档中给出的示例,并生成了以下内容:

...
params.add(name="m", value=m_init, min=m_min, max=m_max)
params.add(name="mni_minus_m", value=1, vary=True, min=1e-12)
params.add(name="m_ni", expr='0.5*m + mni_minus_m')  # max value of m_ni is 0.5*m
...

这驻留在一个接受m_maxm_min等参数的函数中。

正如你可能知道的,我希望m_ni的最大值设置为m值的一半,但除此之外,它可以在零(最好是最小值0.1(和最大值之间自由变化。在一个类似的问题中,出于浮点精度(?(的原因,建议在中间参数中设置min=

不幸的是,这似乎实际上只是将m_ni的值粘在了m的50%上。我试图适应的每件事似乎都是这样。

这完全有可能发生,因为这正是最小二乘法决定要做的,而且这实际上是正确的语法,但我不确定,我想向比我更有能力的人核实。

我还想知道在这种情况下如何设置m_ni的初始值,因为我并不完全清楚

我还没有使用这个库,但听起来你想要

params.add(name="m", value=m_init, min=m_min, max=m_max)
params.add(name="mni_factor", min=0, max=0.5)
params.add(name="m_ni", expr='m * mni_factor')

或者最后一个可能是

params.add(name="m_ni", expr='m * mni_factor if m * mni_factor > 0.1 else 0.1')

以获得0.1的下限,但我不确定这是否真的有利于优化行为:(

相关内容

最新更新