Matlab 数据的直方图、PDF和CDF
(2018-02-12 19:09:29)分类: 程序调试 |
1.给定一组数据画直方图用hist/histc,不过这是旧命令了,新版本的用Histogram,具体使用方法参考matlab
x(j)=(b(i)+b(i+1))/2;
j=j+1;
2.给定一组数据画,画PDF和CDF也是用Histogram(x,'Normorlization','cdf/pdf'),效果比其他自己写的计算cdf和pdf的好,但是缺点是仍旧是柱状图,另外还有单独的命令cdfplot和pdfplot(cdfplot
matlab有命令,pdfplot
matlab有fileexchange,不过里面的代码跟下面思路一样)。注意用histogram和cdfplot算出的结果是一样的,只不过一个是直方图一个是线的表示方式。如果需要单独的点,则需要调用Histogram里的数据计算。
xvalues=randm(1,200);
H=histogram(xvalues,'Normalization','pdf');hold on;
h=H.Values;
b=H.BinEdges;
x=[];j=1;
for i=1:length(b)-1
end
figure(1);plot(x,h,'ro');
下面的是没有histogram之前用Hist或者histc计算的代码,思路一样
计算pdf
输入数据xvalues
c = linspace(floor(min(xvalues)), ceil(max(xvalues)),
20);分20等分
w = c(2)-c(1); % histogram bin-width
h = histc(xvalues,c);
bar(c, h/(w*sum(h)), 'histc'); hold on; 画柱状图
plot(c,h./(w*sum(h)));hold on;画点图
这里注意有的code下面是sum(h)有的要乘以w,按道理是h/sum(h)这样积分才为1,但是形状是一样的,只是高度不一样。
还有一个命令是ksdensity()也可以用来估计Pdf,但是它用的是normal kernel
function来估计
计算cdf
approx_cdf = cumsum(h)/(sum(h));
plot(c,approx_cdf,'rs');hold on;