首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pythin库:如何使用最小化器来限制函数调用的#

Pythin库:如何使用最小化器来限制函数调用的#
EN

Stack Overflow用户
提问于 2017-12-13 19:51:06
回答 1查看 682关注 0票数 0

如何使用Minimizer对象来最小化函数调用的#。我从日志中得到了这样的信息:

太多的函数调用(最大设置为%i)!使用:最小化(func,params,.,maxfev=NNN)或设置最小值to _kws\‘maxfev\’以增加这个最大值。

代码语言:javascript
复制
from numpy import sqrt, pi, exp, loadtxt
from lmfit import  Model
from lmfit import Minimizer
import matplotlib.pyplot as plt

data = loadtxt('data/model1d_gauss.dat')
x = data[:, 0]
y = data[:, 1]

def gaussian(x, amp, cen, wid):
    "1-d gaussian: gaussian(x, amp, cen, wid)"
    return (amp/(sqrt(2*pi)*wid)) * exp(-(x-cen)**2 /(2*wid**2))


gmodel = Model(gaussian)

result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method= 'least_squares')

print(result.fit_report())

r = result.fit_report()

plt.plot(x, y,         'bo')
plt.plot(x, result.init_fit, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()

lmfit文档链接

Github链接

我想通过最小化函数调用来使拟合更快(很多数据都是杂乱的废话)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-13 20:04:03

不确定我是否推荐这样做,但是由于您在内部使用的是正方形,您可以只传递所需的选项,例如:

代码语言:javascript
复制
result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method='least_squares',
                    fit_kws={'max_nfev': 100})

当然,这是假定的,在观察maxiter reached状态之后,lmfit将接受状态。但从你的问题听起来,这只是作为警告。

请记住,这个优化器是基于容差准则(见docs),当不收敛给定x步骤数时,它实际上认为它仍然可以改进最小化!

正如评论中所问的那样:是的,你也可以改变这些标准,例如:

代码语言:javascript
复制
result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method='least_squares',
                fit_kws={'ftol': 1-07,   # default 1e-08
                         'xtol': 1-07,   #         1e-08
                         'gtol': 1-07})  #         1e-08
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47801096

复制
相关文章

相似问题

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