Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据拟合到高斯分布_Python_Gaussian_Astronomy_Spectrum - Fatal编程技术网

Python 将数据拟合到高斯分布

Python 将数据拟合到高斯分布,python,gaussian,astronomy,spectrum,Python,Gaussian,Astronomy,Spectrum,我一直在尝试在我的光谱中加入高斯分布。(强度v/s速度谱) 我使用以下代码将数据拟合到高斯分布。然而,从结果中可以看出,拟合中只包含一个数据点。有什么我可以做的,我可以包括更多的点到高斯分布 from numpy import exp, linspace, random import matplotlib.pyplot as plt def gaussian(x, amp, cen, wid): return amp * exp(-(x-cen)**2 / wid) from sc

我一直在尝试在我的光谱中加入高斯分布。(强度v/s速度谱)

我使用以下代码将数据拟合到高斯分布。然而,从结果中可以看出,拟合中只包含一个数据点。有什么我可以做的,我可以包括更多的点到高斯分布

from numpy import exp, linspace, random
import matplotlib.pyplot as plt
def gaussian(x, amp, cen, wid):
    return amp * exp(-(x-cen)**2 / wid)

from scipy.optimize import curve_fit
x = velocity
y = data
print(x)
print(y)

init_vals = [0.00950554, 60000, 35]  # for [amp, cen, wid]
best_vals, covar = curve_fit(gaussian, x, y, p0=init_vals)
print(best_vals)
print(repr(covar))

ym = gaussian(x, best_vals[0], best_vals[1], best_vals[2])
fig = plt.figure()
ax = fig.add_subplot(211)
ax.plot(x,y)
ax = fig.add_subplot(212)
ax.plot(x, y, c='k', label='Function')
ax.plot(x, ym, c='r', label='Best fit')
plt.legend()
plt.show()
数据点:

x: [-5.99999993e+04 -4.99999993e+04 -3.99999993e+04 -2.99999993e+04
 -1.99999993e+04 -9.99999934e+03  6.65010004e-04  1.00000007e+04
  2.00000007e+04  3.00000007e+04  4.00000007e+04  5.00000007e+04
  6.00000007e+04  7.00000007e+04  8.00000007e+04  9.00000007e+04
  1.00000001e+05  1.10000001e+05  1.20000001e+05  1.30000001e+05
  1.40000001e+05]

y: [ 0.00056511 -0.00098584 -0.00325616 -0.00101042  0.00168894 -0.00097406
 -0.00134408  0.00128847 -0.00111633 -0.00151621  0.00299326  0.00916455
  0.00960554  0.00317363  0.00311124 -0.00080881  0.00215932  0.00596419
 -0.00192256 -0.00190138 -0.00013216]
这些是光谱的数据点。有谁能帮我更好地拟合数据吗。我一直在尽我所能


非常感谢。

第一步始终是绘制数据,您已经绘制了数据。下一步是猜测初始值。如果与绘图相比较,
amp
cen
的图形看起来合理。但是wid的情况如何呢?它是分布平方宽度的2倍。从情节上看,宽度本身必须是几千倍。如果平方,它可能达到10^7,乘以2得到2*10^7作为初始值。离你的35英里远

一种可能的解决办法:

amp=0.0106283
cen=55784
wid=1.92911e+08

绘图:


非常感谢。你能告诉我,为了得到上面的图,我应该对代码做些什么修改吗?我试过了,但复制图表失败了。再次感谢您的帮助。将
wid
的初始值更改为类似于我给出的值,作为可能的解决方案。例如,
1e8
init\u vals=[0.00950554,60000,1e8]
就像一个符咒。再次感谢。我试过了,得到的结果附在“新拟合谱”上。有什么办法可以得到像你得到的那样平滑的曲线吗?我不知道。我不使用python:-)