我试图将高斯分布拟合到我的一些数据中,数据描述密度随高度的变化。这是我到目前为止的代码:
import matplotlib.pyplot as plt
from astropy.modeling import models, fitting
x = heights
y = densities
#calculate fit parameters
n = len(x) #no. of obs
mean = sum(x*y)/n #average
sigma = sum(y*(x-mean)**2)/n #std dev
amplitude = max(y)
g_init = models.Gaussian1D(amplitude, mean, sigma)
fit_g = fitting.LevMarLSQFitter()
g = fit_g(g_init, x, y)
plt.plot(heights, densities)
plt.plot(x, g(x), label='Gaussian')
#plot labels
plt.xlabel("Height[km]")
plt.ylabel("Density")
plt.show()
然而,高斯的图只是一条直线。请帮我弄清楚如何纠正这个问题。我搜索了,问题似乎是它没有收敛,所以我提供幅度为max(y)..但它不起作用。提前致谢。