Skip to main content
 首页 » 编程设计

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

2025年05月04日20EasonJim

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

这是情节: