统计数据的时候,经常需要把数据的直方图和概率密度函数叠加。用matlab编程完成这项功能的时候,有一些技巧需要掌握。下面从理论上说明编程的技巧,并举例。

对于一个样本容量为n的数据集,假定在做直方图时,分割的小区间的长度是 d。于是在第i个区间上的频率可以表示为:

另一方面,如果密度函数为f(x),则此区间上的概率可以用密度函数表示:

我们知道,概率可以用频率近似表示,于是有:

也就是说,频率要先除以被分割后的小区间的长度,然后做出的直方图才能与密度函数图像叠加。

例:做出下列数据的直方图,并叠加正态分布密度函数图像:

data=[459  362  624  542  509  584  433  748   815  505 ...   612  452  434  982  640  742  565  706   593  680 ...   926  653  164  487  734  608  428  1153  593  844 ...   527  552  513  781  474  388  824  538   862  659 ...   775  859  755  49   697  515  628  954   771  609 ...   402  960  885  610  292  837  473  677   358  638 ...   699  634  555  570  84   416  606  1062  484  120 ...   447  654  564  339  280  246  687  539   790  581 ...   621  724  531  512  577  496  468  499   544  645 ...   764  558  378  765  666  763  217  715   310  851];

u=mean(data);v=std(data);%计算期望方差h=max(data)-min(data); %计算极差%%%%%%%%%%%%%%%%%%%%%%%%%%%%以下做频率图%%%%%%%d=h/10; %将数据范围等分成十个区间,计算小区间的长度[n,x]=hist(data,10);%计算每个小区间内的频数及区间中点值f=n/length(data);%计算频率f1=f/d;%频率除以分割区间的长度bar(x,f1)%画出频率的柱状图hold on %%%%%%%%%%%%%%%%%%%%%%%%%%以下做密度函数图像%%%%%x1=min(data):0.1:max(data);y=normpdf(x1,u,v);plot(x1,y,'r','LineWidth',5)%叠加正态分布密度函数