我试图在八度音中绘制均匀分布的cdf,但我没有得到cdf。我只是得到原始发行版。原始分布也是统一分布,根本不是均匀分布的!
这是我的八度代码:
x = unifrnd(0,1,100,1);
hist(x)
cdfPlot = unifcdf(x)
hist(cdfPlot)
第一个(hist(x)
)的直方图:
我也尝试在八度音阶中使用cdfplot(x)
,但它说:
警告:'cdfplot'函数属于统计包 Octave Forge但尚未实施。
请阅读http://www.octave.org/missing.html以了解具体方法 缺少功能。
请帮忙!
答案 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。
希望这有帮助。