Scipy curve_fit接缝工作不好.哪个python库用于拟合曲线更稳定?



我以scipy optimize curve_fit.(https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html)的官方文档页面为例,稍微修改了一下示例中的函数,scipy抛出了一个警告"参数的协方差无法估计";让我很难受。在我看来,这样一个不太特殊的函数的拟合应该工作得很好,所以curve_fit似乎工作得很糟糕,或者我错过了一些点,有一个糟糕的开始?谁能给我一个提示是什么问题,或者我可以使用哪个库。

from scipy.optimize import curve_fit
def func(x, a, b, c):
return a - b*np.exp(-c*x)
xdata = np.linspace(0, 4, 50)
y = func(xdata, 823.5, 5.3, 8.2)
rng = np.random.default_rng()
y_noise = 0.2 * rng.normal(size=xdata.size)
ydata = y + y_noise
plt.plot(xdata, ydata, 'b-', label='data')
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
plt.plot(xdata, y, 'g--', label='Original')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()```

这个问题是由Mikus Szefski解决的(见评论)。解决方案为popt,pcov = curve_fit(func, xdata, ydata, p0=(800, 10,1))。这里,p0在某种程度上是想要的解的近似值,在拟合之前必须自己找到。

最新更新