使用scipy中的curve_fit错误地将数据拟合到曲线

时间:2016-08-08 08:24:07

标签: python python-3.x jupyter-notebook

我正在尝试使用函数scipy.optimize.curve_fit将数据拟合到曲线。给定某些值,该函数按照我希望的方式工作。就这样:

from scipy.optimize import curve_fit    

def f1(x, a, b):
    return a*((1-(x/b))**2)

x_given = [450, 500, 525, 575, 625]
y_given = [33.8, 32.5, 32, 30.2, 28.4]

params, extras = curve_fit(f1, x_given, y_given)

x_new = list(range(-1000, 10000, 1))

plt.plot(x_given, y_given, 'o', markersize=10, color='r')
plt.plot(x_new, f1(x_new, params[0], params[1]))
plt.grid()
plt.show()

并给出以下曲线:

figure 1 但是,当我尝试通过将x_giveny_given更改为x_given = [875, 850, 825, 800]y_given = [26, 26.75, 27.25, 28]来填充不同的数据时,会出现以下错误:

RuntimeError: Optimal parameters not found: Number of calls to function has    
reached maxfev = 600.

所以我增加maxfev直到错误停止显示:

def f1(x, a, b):
    return a*((1-(x/b))**2)

x_given = [875, 850, 825, 800]
y_given = [26, 26.75, 27.25, 28]

params, extras = curve_fit(f1, x_given, y_given, maxfev=3700)
x_new = list(range(-1000, 10000, 1))

然而,现在我得到错误的曲线拟合。曲线的左侧部分应该是点的位置。

enter image description here

我不确定如何纠正这个问题。或者,如果调整maxfev是正确的方法吗?

0 个答案:

没有答案