这个当然我们可以自己处理 但是相当麻烦
很幸运 matlab的统计工具箱中有直接的函数 就是:
ksdensity
核心平滑密度估计
[f,xi] = ksdensity(x)
计算样本向量x的概率密度估计,返回在xi点的概率密度f,此时我们使用plot(xi,f)就可以绘制出概率密度曲线。该函数,首先统计样本x在各个区间的概率(与hist有些相似),再自动选择xi,计算对应的xi点的概率密度
f = ksdensity(x,xi)
与上面的相似,只是这时xi我们帮Matlab选定了,ksdesity直接计算对应点的概率密度
当然ksdedity还有其他参数选项,这里不具体介绍,感兴趣的网友可以自己查看帮助,或者与我交流 matlabsky@gmail.com
- %by dynamic
- %see also http://www.matlabsky.com
- %contact me matlabsky@gmail.com
- %2009.2.21
- %
- %给一个随机样本
- x=[randn(30,1); 5+randn(30,1)];
- %计算出各点的概率密度
- [f,xi]=ksdensity(x);
- %绘制图形
- subplot(211)
- plot(x)
- title('样本数据(Sample Data)')
- subplot(212)
- plot(xi,f)
- title('概率密度分布(PDF)')
从图形中我们可以看出,样本中数据0出现的概率为0.1036,2出现的概率为0.093
%用来画网络延时数据
clc%clear windows
clear all%clear variable
close all %close plot
%给一个随机样本
data=load('delaydata.txt');
%x,y 要维数一样,y is colum vector,
data=data/1000;%us要除以1000,ms
[row,colum]=size(data);
x=[1:1:row];%per 2s plot point
%plot(x,y,'.');
%hold on
%%%%%%%%%%%
mean=mean(data)%求平均值
var=var(data)%求方差
%plot概率密度分布
%[MUHAT,SIGMAHAT] = NORMFIT(y);
%pdf = PDF('norm',y,MUHAT,SIGMAHAT);
%plot(y,pdf,'.');%is equal to plot(x,y,'.');X坐标,Y坐标
%%%%%%%%%%%%
%计算出各点的概率密度
%ymin=min(data);
%ymax=max(data);
%x=linspace(ymin,ymax,20); %将最大最小区间分成20个等分点(19等分),然后分别计算各个区间的个数
%yy=hist(data,x); %计算各个区间的个数
%yy=yy/length(data); %计算各个区间的个数
%bar(x,yy) %画出概率密度分布图
[f,xi]=ksdensity(data);
%绘制图形
subplot(211)
plot(data)
title('样本数据(Sample Data)')
subplot(212)
%plot(xi,f)
[f, xc] = ecdf(data); % 调用ecdf函数计算xc处的经验分布函数值f
ecdfhist(f, xc); % 绘制频率直方图
%bar(x,yy) %画出概率密度分布图
title('网络延时概率密度分布(PDF)')
xlabel('时间/ms');
ylabel('概率');