Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pythin lmfit库:如何使用最小值来限制函数调用的数量_Python_Scipy_Lmfit - Fatal编程技术网

Python Pythin lmfit库:如何使用最小值来限制函数调用的数量

Python Pythin lmfit库:如何使用最小值来限制函数调用的数量,python,scipy,lmfit,Python,Scipy,Lmfit,如何使用Minimizer对象来最小化函数调用的数量。我从日志中得到以下消息: 函数调用太多(最大值设置为%i)!使用:最小化(func,params,…,maxfev=NNN)或设置leastsq_kws[\'maxfev\']以增加此最大值 from numpy import sqrt, pi, exp, loadtxt from lmfit import Model from lmfit import Minimizer import matplotlib.pyplot as plt

如何使用Minimizer对象来最小化函数调用的数量。我从日志中得到以下消息:

函数调用太多(最大值设置为%i)!使用:最小化(func,params,…,maxfev=NNN)或设置leastsq_kws[\'maxfev\']以增加此最大值

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()


我想通过最小化函数调用来加快拟合速度(很多数据都是垃圾)

我不确定我是否建议这样做,但由于您在内部使用scipy,您可以传递所需的选项,例如:

result = gmodel.fit(y, x=x, amp=5, cen=1, wid=1,method='least_squares',
                    fit_kws={'max_nfev': 100})
当然,这是假设lmfit在观察到
maxiter达到的状态后将接受该状态。但从你的问题看来,这只是一个警告

请记住,这个优化器是基于公差标准(参见文档)的,当不收敛于给定的
x
步数时,它实际上认为它仍然可以改进最小化

如评论中所述:是的,您也可以更改这些标准,例如:

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

您是否也可以拟合数据,直到出现可接受的错误?如果是这样的话,代码片段是什么?@im281您可以使用任何参数,并记录在案。我添加了一些示例。