我无法使用 scipy.optimize.curve_fit
来拟合由 numpy.sinc 生成的数据。即使我做了(或者至少我认为我做了)与 scipy 文档中完全相同的事情。这是我的简单尝试:
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
xdata = np.arange(-10, 10, 0.1)
y = 100*np.sinc(xdata - 3) + 1
y_noise = np.random.normal(3, 2, 200)
ydata = y + y_noise
def func(x, a, h, k):
return(a*np.sinc(x - h) + k)
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, ydata)
plt.plot(xdata, func(xdata, *popt))
plt.show()
结果如下:
最佳答案
对于许多函数,您必须为 curve_fit
提供参数的“相当不错”的初始猜测。没有它,优化例程会找到其目标函数的局部最小值,这实际上是一个不合适的。
在你的例子中,我通过使用得到了一个很好的契合:
k = ydata.argmax()
p0 = [ydata[k], xdata[k], ydata.mean()]
popt, pcov = curve_fit(func, xdata, ydata, p0=p0)
这是情节:
关于python - 为什么 scipy.optimize.curve_fit 不能使用 numpy.sinc 函数拟合我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676116/