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


结果如下:

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

最佳答案

您可以使用curve_fitp0=[...]提供初始猜测

例如:

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, p0=[100, 1, 1])

plt.plot(xdata, ydata)
plt.plot(xdata, func(xdata, *popt))
plt.show()


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

07-24 09:52
查看更多