本文主要介绍一下如何使用 Matlab 来绘制数据的分布频数分布直方图、概率密度曲线和累积分布曲线等;另外还介绍了如何用 makedist 函数来构造概率密度。
一个小总结
clc;clear
% 构造数据, 生成 10000 个服从 N(3,4) 正态分布的数据
Data=normrnd(3,4,10000,1);
% [yy1,xx1]=ksdensity(Data); % 直接得到频率 yy1
% 首先得到频数
[counts,centers] = hist(Data,100);
% 计算频率
frequency = counts / sum(counts);
% 注意,这里是要除以步长的!!!
frequency1 = frequency / (centers(2)-centers(1));
% 计算累积频率
cum_frequency=cumsum(frequency,2);
% 绘图
hist(Data,100)
figure
plot(centers,frequency1)
figure
plot(centers,cum_frequency)
首先准备数据,这里用随机数生成正态分布的一组数据。
% 构造数据, 生成 10000 个服从 N(3,4) 正态分布的数据
Data=normrnd(3,4,10000,1);
然后绘制频数分布直方图
hist(Data,100) // 100 个长条
绘制频率密度曲线 (方法一)
// 首先得到频数
[counts,centers] = hist(Data,100);
// 计算频率
frequency = counts / sum(counts);
// 注意,这里是要除以步长的!!!
frequency1 = frequency / (centers(2)-centers(1));
// 绘制频率密度曲线
plot(centers,frequency1)
上面这个图就是因为没有除以步长,所以纵坐标才比较小。
绘制累积分布曲线
% 计算累积频率,这里用的是 frequency,而不是 frequency1
cum_frequency=cumsum(frequency,2);
plot(centers,cum_frequency)
绘制频率密度曲线 (方法二)
% 注意:这里又随机生成了一组数据,和之前的那组数据已经不一样了。
Data=normrnd(3,4,10000,1);
[yy1,xx1]=ksdensity(Data);
plot(xx1,yy1)
这个曲线或许比方法一的曲线要平滑一些。
这部分介绍如何构造一个指定分布的概率密度函数。
makedist 的用法如下:
pd = makedist(distname)
pd = makedist(distname,Name,Value)
list = makedist
输入参数:
输出参数:
支持的分布名有:
示例代码如下:
// 构造一个稳定分布
pd1 = makedist('Stable','alpha',2,'beta',0,'gam',1,'delta',0);
x = -5:.1:5;
pdf1 = pdf(pd1,x);
-------------------------------------------------------------------
pd1 =
StableDistribution
Stable distribution
alpha = 2
beta = 0
gam = 1
delta = 0
上面的代码构造了一个稳定分布,指定了参数 α = 2 , β = 0 , γ = 1 , μ = 0 \alpha=2,\beta=0,\gamma=1,\mu=0 α=2,β=0,γ=1,μ=0。
有时候不知道一个分布在 Matlab 中有几个参数,各个参数的名称是什么,可以首先用下面的代码进行试探
pd2=makedist('Burr')
然后点击蓝色文字查看帮助文档
在理解了各个参数之后,再按自己的需求对各个参数进行赋值,进而生成自己所需的概率密度函数:
pd2=makedist('Burr','alpha',2,'c',3,'k',4);
pts=linspace(-5,5,1000);
y = pdf(pd2,pts);
plot(pts,y);