Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.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 lmfit-minimizer不接受scipy minimizer关键字参数_Python_Scipy_Lmfit - Fatal编程技术网

Python lmfit-minimizer不接受scipy minimizer关键字参数

Python lmfit-minimizer不接受scipy minimizer关键字参数,python,scipy,lmfit,Python,Scipy,Lmfit,我正在尝试使用lmfit将某些模型拟合到我的数据中。见以下MWE: 导入lmfit 将numpy作为np导入 def lm(参数,x): 斜率=参数['slope'] interc=params['interc'] 返回区间+坡度*x def lm_min(参数、x、数据): y=lm(参数x) 返回数据-y x=np.linspace(01000) y=lm({'slope':1,'interc':0.5},x) ydata=y+np.random.randn(1000) params=lmf

我正在尝试使用
lmfit
将某些模型拟合到我的数据中。见以下MWE:

导入lmfit
将numpy作为np导入
def lm(参数,x):
斜率=参数['slope']
interc=params['interc']
返回区间+坡度*x
def lm_min(参数、x、数据):
y=lm(参数x)
返回数据-y
x=np.linspace(01000)
y=lm({'slope':1,'interc':0.5},x)
ydata=y+np.random.randn(1000)
params=lmfit.Parameters()
参数添加('slope',2)
参数添加('interc',1)
fitter=lmfit.Minimizer(lm_min,params,fcn_args=(x,ydata),fit_kws={'xatol':0.01})
装配=装配工。最小化(方法='nelder')
为了提前完成(精度现在不是最重要的事情),我想更改停止拟合的标准。基于和上的一些搜索,我尝试给出一些关键字参数(
fit_kws
,在下面的行中),这些参数将传递给所使用的最小值。我还尝试使用
kws
**{'xatol':0.01}
。接下来,我在最后一行调用
fitter.minimize()
时也尝试了前面提到的选项。但是,在所有情况下,我都会得到一个
TypeError
,表示它得到了意外的关键字参数:

---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
~/STACK/WUR/PhD/实验/小气候实验/脚本/波动/mwe.py in()
25
26 fitter=lmfit.Minimizer(lm_min,params,fcn_args=(x,ydata),fit_kws={'xatol':0.01})
--->27配合=装配工。最小化(方法='nelder')
28
最小化中的~/anaconda3/envs/py/lib/python3.6/site-packages/lmfit/minimizer.py(self、method、params、**kws)
1924 val.lower().startswith(用户方法)):
1925 kwargs['method']=val
->1926返回函数(**kwargs)
1927
1928
标量最小化中的~/anaconda3/envs/py/lib/python3.6/site-packages/lmfit/minimizer.py(self、method、params、**kws)
906其他:
907尝试:
-->908 ret=scipy_最小化(自我惩罚,变量,**fmin_kws)
909除AbortBitException外:
910通行证
TypeError:minimize()获得意外的关键字参数“fit_kws”
有人知道如何为特定解算器添加关键字参数吗

版本信息: python:3.6.9
scipy:1.3.1

lmfit:0.9.12

将关键字参数传递给底层
scipy
解算器的最佳方法就是使用

# Note: valid but will not do what you want
fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), xatol=0.01)
fit = fitter.minimize(method='nelder')

这里的主要问题是
xatol
不是底层解算器
scipy.optimize.minimize()
的有效关键字参数。相反,您可能想使用
tol

fitter = lmfit.Minimizer(lm_min, params, fcn_args=(x, ydata), tol=0.01)
fit = fitter.minimize(method='nelder')

在github中,我找到了以下解决方案:

fit = fitter.minimize(method='nelder', **{'options':{'xatol':4e-4}})
更新
正如@dashesy所提到的,这与写作相同:

fit = fitter.minimize(method='nelder', options={'xatol':4e-4})

这也适用于其他解算器选项。

只需传递字典,没有诸如
'fit_kws'
之类的关键字。正如我所说,我已经尝试使用**{xatol':0.01}传递字典。对不起,我不是要说字典。只需通过
xatol=0.01
而不使用
**
它将作为字典
{'xatol':0.01}
接收。也已经尝试过了,给出了相同类型的错误,但是对于xatol。您使用的是
lmfit
的哪个版本?前两个选项与我之前解释的不一样。这一论点确实是例外,并符合我的预期。我找到了另一个解决方案,我将在下面发布。顺便说一句,感谢您更改了标题,愚蠢的错误…这相当于
fit=fitter.minimize(method='nelder',options={'xatol':4e-4}})
@dashesy:您是对的。相应地更新了我的答案。
fit = fitter.minimize(method='nelder', **{'options':{'xatol':4e-4}})
fit = fitter.minimize(method='nelder', options={'xatol':4e-4})