【发布时间】:2019-08-16 14:42:54
【问题描述】:
如果我将与该数据相对应的 x 值的间隔(xdata1 到 @987654326 @)。高斯写成:
其中 A 只是一个幅度因子。更改数据的一些值,很容易使其适用于两种情况,但也可以很容易地找到它不适用于xdata1 以及未估计参数协方差的情况。
我在 Windows 7 上使用带有 Python 3.7.1 的 Spyder 中的 scipy.optimize.curve_fit。
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, gaussian(xdata2, *popt2), 'r-', label='fit')
ax2.legend()
【问题讨论】:
标签: python curve-fitting gaussian data-fitting