首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python brentq问题

Python brentq问题
EN

Stack Overflow用户
提问于 2013-12-17 03:24:14
回答 1查看 1.9K关注 0票数 0

我使用lmfit来寻找拟合的置信区间,但它经常给我一个错误:ValueError: f(a) and f(b) must have different signs

下面是一个最小的工作示例(运行几次就会得到错误):

代码语言:javascript
运行
复制
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)

它为什么要这样做?有没有什么办法呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-12-17 11:26:37

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

我会把它报告为一个问题https://github.com/lmfit/lmfit-py/issues

通过找到轮廓似然等于某个值的点来计算置信区间。这需要找到一个非线性函数的零点或根。这种方法通常比依赖局部导数提供更准确的置信区间,例如scipy的curve_fit。

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

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

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

https://stackoverflow.com/questions/20619156

复制
相关文章

相似问题

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