我有两个相关的拟合参数。它们的装配范围是一样的。我们叫他们r1和r2。我知道我可以使用minuit.limits限制拟合范围,但是我有一个额外的条件,r2必须比r1小,我能用iminuit做这个吗?
发布于 2022-09-15 17:43:42
我找到这个了,希望这能帮到你!
提取自:https://iminuit.readthedocs.io/en/stable/faq.html
**我是否可以有相互依赖的参数限制(例如x^2 + y^2 <3)?** MINUIT只是为了处理盒约束而设计的,这意味着参数的限制是相互独立的,并且在最小化过程中是常数的。如果您想要相互依赖的限制,您有三个选项(所有这些选项都有警告),这些选项按难度增加的顺序列出:
更改变量,使限制变得独立。例如,圆从笛卡尔坐标到极坐标的转换。当然,这并不总是可能的。
使用另一个最小化器来定位支持复杂边界的最小值。nlopt库和scipy.optimize具有这样的最小值。一旦找到了最小值,如果它不在边界附近,将方框约束放在最小值附近,然后运行iminuit来获取不确定性(确保盒约束在最小值附近不太紧)。无论是选择还是参与都不能给你带来不确定性。
人为地增加禁区内的负对数似然。这并不像听起来那么容易。
第三种方法被称为内点法或势垒法。浏览一下维基百科的文章就会发现,要么使用iminuit运行一系列的最小化(并找到一种聪明的方法知道何时停止),要么在牛顿步的水平上正确地实现这一点,这需要对MINUIT2复杂而复杂的内部结构进行更改。
警告:当参数边界被违反时,您不能仅仅增加一个很大的值。MIGRAD期望似然函数在任何地方都是微分的,因为它使用了可能性的梯度去下坡。在禁止区域中,离散步长处的导数为无穷大和零。MIGRAD一点都不喜欢这样。
https://stackoverflow.com/questions/71509612
复制相似问题