八度分布图不起作用

时间:2015-12-09 12:12:19

标签: plot octave distribution

我试图在八度音中绘制均匀分布的cdf,但我没有得到cdf。我只是得到原始发行版。原始分布也是统一分布,根本不是均匀分布的!

这是我的八度代码:

x = unifrnd(0,1,100,1);
hist(x)
cdfPlot = unifcdf(x)
hist(cdfPlot)

第一个(hist(x))的直方图:

enter image description here

和第二个(hist(cdfPlot)): enter image description here

我也尝试在八度音阶中使用cdfplot(x),但它说:

  

警告:'cdfplot'函数属于统计包   Octave Forge但尚未实施。

     

请阅读http://www.octave.org/missing.html以了解具体方法   缺少功能。

请帮忙!

1 个答案:

答案 0 :(得分:1)

根据提交的代码判断,您要做的是从均匀分布中获取样本,然后显示对应于均匀分布的平坦(大部分)直方图和对应于分布的累积分布的线。 / p>

第一部分: 当然,有100个样本(并且没有平均值),你不会观察到平坦的分布,但如果你尝试:

x=unifrnd(0,1,100000,1);
hist(x);

然后你更有可能得到一个平面的直方图。

第二部分: unifcdf(x,A,B)将在参数A,B设置的间隔之间以某个值x返回均匀分布的CDF的值。也就是说,CDF模型本身的值, NOT 样本的直方图的累积和。要获得这一点,您需要:

x=unifrnd(0,1,100000,1);
[counts, intervals] = hist(x);
xCDF = cumsum(counts);
bar(xCDF);

最后,如果您正在寻找模型值,即描述分布的公式将返回的值,那么对于均匀分布,您的A,B之间的概率为(1/nBins)区间(在这种情况下,0,1)和计数(1/nBins)*NSamples,而CDF将是斜率(1/nBins)(即密度函数的区间)和binNum*((1/nBins)*NSamples)的线。在上面的示例中,使用nBins的默认hist为10,x被分解为10个区间,每个区间的计数大约为10000个x项和累积和的最后一个值是100000,这当然是x中的样本总数。

有关详细信息,请参阅this link

希望这有帮助。