首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中设置一个比另一个参数更大的拟合参数作为约束?

如何在python中设置一个比另一个参数更大的拟合参数作为约束?
EN

Stack Overflow用户
提问于 2022-03-17 09:06:08
回答 1查看 56关注 0票数 0

我有两个相关的拟合参数。它们的装配范围是一样的。我们叫他们r1和r2。我知道我可以使用minuit.limits限制拟合范围,但是我有一个额外的条件,r2必须比r1小,我能用iminuit做这个吗?

EN

回答 1

Stack Overflow用户

发布于 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一点都不喜欢这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71509612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档