Python Scipy优化边界的曲线拟合误差

Python Scipy优化边界的曲线拟合误差,python,python-3.x,scipy,curve-fitting,bounds,Python,Python 3.x,Scipy,Curve Fitting,Bounds,当我尝试跑步时: bet = (nu[minimum],10**4,3000,0,0,5000) # Array of initial bet parameters bound = ( (nu[0],nu[len(nu)-1]),(10**3,10**6),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf) ) popt,pcov = curve_fit(S_21,x,y, p0=bet, bounds =

当我尝试跑步时:

bet = (nu[minimum],10**4,3000,0,0,5000)   # Array of initial bet parameters
bound = ( (nu[0],nu[len(nu)-1]),(10**3,10**6),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf),(-np.inf,np.inf) )
popt,pcov = curve_fit(S_21,x,y, p0=bet, bounds = bound)
TypeError:leastsq()获得意外的关键字参数“bounds”


有什么问题?我在Windows上使用Python 3.4.4。

scipy.optimize.leastsq
不支持边界,在scipy版本0.17之前一直由
curve\u fit
使用。OTOH,
scipy.optimize.least_squares
(在较新版本的scipy中由
curve\u fit
使用)可以支持边界,但在使用
lm
(Levenberg-Marquardt)方法时不支持,因为这是
scipy.optimize.leastsq
的简单包装。这有点令人困惑


请允许我推荐尝试
lmfit
(),它支持所有参数的边界,并且可以轻松地修复/更改参数,而无需更改模型函数。Lmfit的模型类提供了一种方便的曲线拟合方法,并提供了大量用于探索参数置信区间的工具。

在scipy 0.17以下版本(在0.14和0.15中尝试过)中,另一个对我有效的解决方法是告诉leastsq对func进行更多调用(但这取决于func的收敛速度)

例如,您可以尝试:

popt,pcov = curve_fit(S_21,x,y, p0=bet, maxfev=10000)

bounds
参数是在scipy版本0.17中添加的。您使用的是哪个版本?请使用
import scipy;print(scipy.\uuuuuuuuu版本)
进行检查。