python - 为什么 scipy.optimize.curve_fit 不能使用 numpy.sinc 函数拟合我的数据?

标签 python numpy scipy curve-fitting

我无法使用 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()

结果如下:

enter image description here

最佳答案

对于许多函数,您必须为 curve_fit 提供参数的“相当不错”的初始猜测。没有它,优化例程会找到其目标函数的局部最小值,这实际上是一个不合适的。

在你的例子中,我通过使用得到了一个很好的契合:

k = ydata.argmax()
p0 = [ydata[k], xdata[k], ydata.mean()]
popt, pcov = curve_fit(func, xdata, ydata, p0=p0)

这是情节:

plot

关于python - 为什么 scipy.optimize.curve_fit 不能使用 numpy.sinc 函数拟合我的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49676116/

相关文章:

Python:你如何准确地获取一个字符串,将其拆分、反转并重新组合在一起?

python - 如何使用 PySide2 Python 后端将 PyQtGraph 嵌入到 QML 中?

python - 执行 make 时在 Raspberry Pi 中安装 OpenCV 时出错

python - 根据python中的条件更新多个列值

python - Python中有没有办法计算多条曲线之间的重叠面积?

python - 错误 : Installing SciPy in Windows 10 64bit using pip (Python 3. 5.2)

python - 如何在 Keras 模型中使用 F1 Score?

python - 为什么在线性回归中创建矩阵的逆时,numpy.linalg.pinv() 优于 numpy.linalg.inv()

python - 是否可以使用 p7 python 发行版安装 SciPy?

python - 最小化以numpy数组为参数的python函数