如何在VB.net中制作钟形曲线

时间:2014-01-06 23:53:35

标签: vb.net statistics

我有一个程序来构建直方图,我想根据我从工程中获得的目标添加一条代表理想曲线的钟形曲线。

这是一个快照,让您了解我正在使用的内容。 enter image description here

我将秒格式化为hh:mm:ss。

在这个例子中:
箱子:20
目标:672秒
min:120秒
最长:1200秒

如何绘制上述标准的理想曲线?

一旦我弄明白,红线最终会弯曲。

2 个答案:

答案 0 :(得分:1)

你如何在这里定义“理想曲线”?如果您想使用高斯钟形曲线,您需要使用非线性曲线拟合算法({Levenberg-Marquardt,Nelder-Mead-Simplex是流行的算法)将f(t)=a*Exp(-(t-b)^2/2c^2)+d形式的曲线拟合到您的数据中。 虽然自己编写这些算法很有趣,但它们涉及大量的数学运算。所以我会建议你找到合适的图书馆(LMA是我能从头脑中思考的)。 或者您可以参考使用大量代码示例来涵盖此主题的数字接收。

您需要自己做的是从数据中找到适合的拟合起始参数。在高斯曲线不是太难的情况下(a是幅度,几乎是最高和最低y值之间的差异,b是最大值的x偏移量,{ {1}}是曲线宽度的度量,如果正确初始化其他参数,则可以相对自由地选择,c是数据的y基线,例如集合的最低值。

根据拟合,您可以在上面的公式中获得最佳描述数据的钟形曲线的参数a-d。使用这些参数计算直方图间隔(50左右)中的一组y点,并将它们绘制在红线系列中。

作为这样的拟合结果的一个示例,我在原始数据上使用非线性拟合来制作一个。注意曲线的4个参数的结果(这里的命名略有不同)。

Gaussian fitted data

答案 1 :(得分:1)

通过“理想”曲线,我假设你的意思是高斯密度。如果这不是您的意思,您将不得不更新问题陈述以清楚地说明您的意思。

考虑到这一点,只需找到数据的均值和标准差(最好在分箱之前,虽然之后是好的;我怀疑它是否有很大差异)并绘制高斯密度(p(x)= exp( - (1) / 2)*((x-mu)/ sigma)^ 2)/(sigma * sqrt(2 pi)))其中mu = mean和sigma = std偏差。我假设您可以制作一个点列表并为任何给定的公式绘制它们。