Python高斯曲线拟合得到直线,提供y的振幅

2024-06-17 13:12:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用高斯分布拟合一些数据,这些数据描述了密度随高度的变化。以下是我目前掌握的代码:

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)。。但这行不通。提前谢谢。在


Tags: 数据importplotinitmodelspltmeansigma