我在理解如何将高斯曲线拟合到我的峰值时遇到了极大的困难。有一些类似的问题,但即使在看了这些之后我仍然不确定。统计/概率论等从来都不是我的强项,但我认为令我困惑的是高斯钟形曲线是简单地使用平均值和标准差来计算的。与其他曲线拟合方法不同,不使用峰值中的实际原始值。
我已经实现了高斯函数;
public static float getGaussian(float x, float mean, float stdDev)
{
float v1 = 1F / (stdDev * (float)Math.Sqrt(2 * Math.PI));
float v2 = ((x - mean) * (x - mean)) / (2 * (stdDev * stdDev));
return (v1 * (float)Math.Exp(-v2));
}
我认为这是正确的,但我的“曲线”最终看起来像一个平坦的平原,所以我显然做错了什么。
原始数据,即 (x,y) 点是
(9,0) (10,1) (11,2) (12,3) (13,4) (14,10) (15,12) (16,13) (17,23) (18,26) (19,23) (20,20) (21,17) (22,12) (23,5) (24,3) (25,3) (26,4) (27,2) (28,2) (29,1)
谁能解释一下如何根据这些数据计算高斯曲线以及曲线是什么样子?
最佳答案
看来你只有整数。假设这是来自正态分布数据的直方图,您将拥有:
xs = sum_i x_i * y_i
ns = sum_i y_i
mean = xs / ns
ss = sum_i y_i * ( x_i - mean) * ( x_i - mean)
sigma = sqrt( ss / ( ns - 1 ) )
最后,如果 g( x, x0, s )
是均值 x0
和标准差 s
的归一化高斯,则
ns * g( x, mean, sigma )
应该近似您的数据。
关于C#。如何将高斯钟形曲线应用于我的峰值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64156209/