Python-brentq问题

Python-brentq问题,python,scipy,data-fitting,Python,Scipy,Data Fitting,我使用lmfit来寻找拟合的置信区间,但它经常给我一个错误:ValueError:fa和fb必须有不同的符号 下面是一个简单的工作示例,请运行几次以获取错误: import lmfit import numpy as np def residual(p, X): a1, a2, t1, t2 = [i.value for i in p.values()] return a1*np.exp(-x/t1)+a2*np.exp(-x/t2)-y if __name_

我使用lmfit来寻找拟合的置信区间,但它经常给我一个错误:ValueError:fa和fb必须有不同的符号

下面是一个简单的工作示例,请运行几次以获取错误:

import lmfit
import numpy as np

def residual(p, X):
        a1, a2, t1, t2 = [i.value for i in p.values()]
        return a1*np.exp(-x/t1)+a2*np.exp(-x/t2)-y

if __name__ == '__main__':
    x = np.linspace(0.3,10,100)
    y = 3*np.exp(-x/2.)-5*np.exp(-x/10.)+0.2*np.random.randn(x.size)
    p = lmfit.Parameters()
    p.add_many(('a1', 5), ('a2', -5), ('t1', 2), ('t2', 5))
    mi = lmfit.minimize(residual, p, args=(x,))
    lmfit.printfuncs.report_fit(mi.params, show_correl=False)
    ci, trace = lmfit.conf_interval(mi, sigmas=[0.68,0.95], trace=True, verbose=False)
    lmfit.printfuncs.report_ci(ci)
为什么会这样?附近有工作吗


谢谢

我不知道具体的答案或解决方法

我将把它作为一个问题报告

置信区间的计算方法是找到轮廓可能性等于一个值的点。这需要找到非线性函数的零或根。 这种方法通常提供比依赖局部导数更精确的置信区间,例如scipy的曲线拟合

通常,为scipy的brentq指定适用于所有情况的边界是很棘手的。我的猜测是,默认边界对于您的示例来说太紧了


我对这个方法只有一个大概的了解,但不知道lmfit中的具体代码。

这似乎就是正在发生的事情。紧边界的定义是什么?