我很难理解为什么我将高斯拟合到一组数据(ydata)时无法正常工作,如果我将与该数据相对应的x值的间隔(xdata1到xdata2)移开了。高斯写为:
其中A只是一个振幅因子。更改数据的某些值,很容易使其适用于两种情况,但是也可以轻松地找到不适用于这些情况以及xdata1未估计参数协方差的情况。我scipy.optimize.curve_fit在Windows 7上的Python 3.7.1中的Spyder中使用。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
xdata1 = np.linspace(-9,4,20, endpoint=True) # works fine
xdata2 = xdata1+2
ydata = np.array([8,9,15,12,14,20,24,40,54,94,160,290,400,420,300,130,40,10,8,4])
def gaussian(x, amp, mean, sigma):
return amp*np.exp(-(((x-mean)**2)/(2*sigma**2)))/(sigma*np.sqrt(2*np.pi))
popt1, pcov1 = curve_fit(gaussian, xdata1, ydata)
popt2, pcov2 = curve_fit(gaussian, xdata2, ydata)
fig, ([ax1, ax2]) = plt.subplots(nrows=1, ncols=2,figsize=(9, 4))
ax1.plot(xdata1, ydata, 'b+:', label='xdata1')
ax1.plot(xdata1, gaussian(xdata1, *popt1), 'r-', label='fit')
ax1.legend()
ax2.plot(xdata2, ydata, 'b+:', label='xdata2')
ax2.plot(xdata2, …Run Code Online (Sandbox Code Playgroud)