当我尝试运行时:
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() got an unexpected keyword argument 'bounds'
有什么问题吗?我在 Windows 上使用 Python 3.4.4。
最佳答案
scipy.optimize.leastsq
不支持边界,在 scipy 版本 0.17 之前由 curve_fit
使用。 OTOH,scipy.optimize.least_squares
(在较新版本的 scipy 中由 curve_fit
使用)可以支持边界,但在使用 lm
时不支持> (Levenberg-Marquardt) 方法,因为它是 scipy.optimize.leastsq 的简单包装。这有点令人困惑。
请允许我推荐尝试 lmfit
( http://lmfit.github.io/lmfit-py/ ),它确实支持所有参数的界限,并且可以轻松修复/更改参数,而无需更改模型函数。 Lmfit 通过其 Model 类提供了一种便捷的曲线拟合方法,以及大量用于探索参数置信区间的工具。
关于python - Scipy 优化 Curve_fit 边界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44245026/