【发布时间】:2021-06-28 13:44:34
【问题描述】:
我正在尝试使用以下代码进行两分量高斯拟合:
def double_gaussian(velo_peak,a1, mu1, sigma1, a2, mu2, sigma2):
res_two = a1 * np.exp(-(velo_peak - mu1)**2/(2 * sigma1**2)) \
+ a2 * np.exp(-(velo_peak - mu2)**2/(2 * sigma2**2))
return res_two
#Guess parameters:
guess = [5, 115.2, 0.7, 4, 115.7, 0.7]
popt,pcov = curve_fit(double_gaussian, velo_peak, spec_peak, guess)
plt.plot(velo_peak*1e-9, double_gaussian(velo_peak, *popt), 'r-', label='fit')
我用两个分量定义了方程,然后输入了猜测值并尝试绘制,但我得到以下错误:
warnings.warn('Covariance of the parameters could not be estimated',
因此,我得到了一条适合的直线。
我会说我发现代码合乎逻辑,但当然,有问题。提供的任何帮助将不胜感激。
【问题讨论】:
-
你为什么要这么做
velo_peak*1e-9?还有,velo/spec_peak里面是什么,能提供样本数据吗? -
这是巨大的样本数据,我认为它不会有用,因为它们可以被视为具有值的两个数组。 velo_peak 乘以这个因子只是为了转换。
-
我在我生成的示例数据上尝试了您的代码,就像他们在示例 here 中所做的那样,它没有问题,没有
*1e-9。 -
您对最初的猜测有多大把握?我正在用越来越糟糕的猜测拟合数据,并且在某个时刻我收到警告,但拟合失败了。也许在 pastebin 或类似的东西上上传一个小的随机样本?
标签: python numpy plot curve-fitting gaussian