我正在尝试使用函数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()
并给出以下曲线:
但是,当我尝试通过将x_given
和y_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))
然而,现在我得到错误的曲线拟合。曲线的左侧部分应该是点的位置。
我不确定如何纠正这个问题。或者,如果调整maxfev
是正确的方法吗?