我正在尝试使用作为ROOT数据分析框架的一部分的 Minuit2 最小化器为具有物理限制的参数生成等高线图。不幸的是,当我尝试生成等高线图时,Minuit2 似乎有意将参数漂移到超出其限制的区域:
>>> from minuit2 import Minuit2
>>> def f(x,y):
... if x < 0 or y < 0:
... print 'x = %.2f, y = %.2f' % (x,y)
... raise Exception
... return x**2 + y**2
...
>>> m = Minuit2(f)
>>> m.limits['x'] = 0, 10
>>> m.limits['y'] = 0, 10
>>> m.migrad()
>>> xy = m.contour('x','y',3)
Info in <Minuit2>: MnMinos UP value has changed, need to update FunctionMinimum class
x = -9.95, y = 0.00
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in f
Exception
有没有其他人处理过这个或类似的问题?有什么解决方法吗?
我已经在ROOT 论坛上问过这个问题,但我认为可能还有一些堆栈溢出用户已经处理过这个或类似的问题。