【小白话通信】离散分布的生成

简介: 本文讲解的不是离散分布的一些性质如:方差、期望和概率密度函数pdf(若为离散分布,则是概率质量函数pmf)等。

本文讲解的不是离散分布的一些性质如:方差、期望和概率密度函数pdf(若为离散分布,则是概率质量函数pmf)等。本文要讲解的是如何通过均匀分布来产生其他各种分布的方法。尽管很多编程语言的函数库中包含了这些分布函数:

  • 在matlab中,我们可以看到关于这些函数的详细文档及使用方法:
    matlab帮助文档

  • 在linux C中,GNU有一个名字叫GUN Scientific Library的库,里面有各种分布函数,比如说,高斯分布:
    http://www.gnu.org/software/gsl/manual/html_node/The-Gaussian-Distribution.html

  • 在标准C中,就只有仅仅的rand函数来产生均匀分布,那么这时候就需要使用均匀分布来产生其他分布了。

在下文中,我只是用比较通俗易懂的方式来说明用均匀分布来产生各种其他分布的过程,从而知道如何编程实现,具体原理的证明以及各种分布函数的性质就不具体展开


离散分布

离散分布主要有以下几种:均匀分布、超几何分布、二项分布、泊松分布、负二项分布、几何分布

基本原理:
对于一个给定的离散分布,我们假设其分布如下:有n个离散的取值分别为x1,x2,,xn,他们的概率分别为Px1,Px1,,Pxn,并且有Px1+Px1++Pxn=1,设该离散分布的分布函数为F(x),那么,我们可以通过如下步骤来产生该离散分布:
1. 产生区间在[0,1]的均匀分布U
2. 当F(xi)<UF(xi+1)时,令X=xi+1,这时X的取值就服从上述给定的离散分布。

上述理论很简单,不过为了更简单明了的说明上述原理步骤,下面通过举例来具体描述:
假设离散分布如下:x的可能取值分别为1,2,3,对应的概率分别为14,14,12。那么其分布函数F(x)可以表示如下:

F(x)=0,x<114,1x<212,2x<31,x3

那么通过均匀分布产生上述离散分布的方法由步骤2可知如下式
X=x1,0<UF(x1)x2,F(x1)<UF(x2)x3,F(x2)<UF(x3)x1=1,x2=2,x3=3

其中,由分布函数 F(x)的表达式可知, F(x1)=14,F(x2)=12,F(x3)=1,带入到上式中可知, x取值分别为 1,2,3时,对应的概率分别为 14, 14, 12,即服从上面指定的离散分布。

从上面的方法可以看出,只要知道了离散随机变量在各个点的概率就可以使用该方法,通过均匀分布得到指定的分布了。而各个点的概率可以通过概率质量函数(pmf)得到。关于各种离散分布的pmf,我们可以在维基百科上得到。下面通过上面提到的方法,分别以二项分布、泊松分布为例进行Matlab编程实现:


二项分布

clear all
close all
clc

%二项分布
%参数:实验次数n,每次实验成功概率p
%mean=np ,  var=np(1-p)
n=10,p=0.5
%---------------由Matlab内置函数直接给出--------------%
%二项分布的产生,即n次实验成功的次数X,X<=n
X1= binornd(n,p);
%二项分布概率质量密度pmf
x = 0:n;
Py = binopdf(x,n,p);%当取值分别为x的时候的概率
plot(x,Py,'r*')
hold on

%---------------由均匀分布U推导出--------------------%
N=1000;%样本点数
U=rand(1,N);%U服从均匀分布

for i=0:n
    P(i+1)=nchoosek(n,i)*p^i*(1-p)^(n-i);%不同的离散分布只需更改这里的计算公式来计算pmf
end

P=cumsum(P);%得到累计分布函数cdf

X2=U;
for i=1:length(X2)
    X2(i)=sum(X2(i)>P);
end
%X2就是我们通过均匀分布得到的服从二项分布的变量

%计算通过均匀分布得到的服从二项分布的pmf,从而与理论的pmf对比
for i=0:n
     Y2(i+1)=sum(X2==i);
end

plot([0:n],Y2/N,'bo')
title('二项分布的pmf')
legend('自带函数产生','均匀分布产生')

%--------------------------------------------------------------------%

运行结果如下:
这里写图片描述


泊松分布

每个分布的实现大致相同,只需要更改计算pmf的公式即可!由于泊松分布在实际问题中非常常见,因此在此赘述。

%泊松分布
%参数:到达率lambda
%mean=lamda,  var=lambda
clear all
close all
clc
lambda=1;
n=10;%x的取值为0到无穷大,这里只取前n个
%------------------------由内置函数直接给出---------------------%
%泊松分布的产生,即单位时间内事件发生的次数x,x取值为0到正无穷
X=poissrnd(lambda,1,10);%产生10个服从参数为lamda的泊松分布

%泊松分布的cdf
x=0:n;
Fx=poisscdf(x,lambda);
%figure
%plot(x,Fx,'r*')
%title('泊松分布的cdf')

%泊松分布的pdf
x=0:n;
Px=poisspdf(x,lambda);
figure
plot(x,Px,'r*')
hold on
title('泊松分布的pmf')



%-----------------------由均匀分布推导出-----------------------%
N=1000;%样本点数
U=rand(1,N);%U服从均匀分布

for i=0:n
    P(i+1)=exp(-lambda)*lambda^i/factorial(i);%不同的离散分布只需更改这里的计算公式来计算pmf
end

P=cumsum(P);

X2=U;
for i=1:length(X2)
    X2(i)=sum(X2(i)>P);
end
%X2就是我们通过均匀分布得到的服从参数为lambda的泊松分布的变量

%计算通过均匀分布得到的服从泊松分布的pmf,从而与理论的pmf对比
for i=0:n
     Y2(i+1)=sum(X2==i);
end

plot([0:n],Y2/N,'bo')
title('泊松分布的pmf')
legend('自带函数产生','均匀分布产生')

显示结果如下:(到达率lambda为1时)

这里写图片描述

原文:http://blog.csdn.net/tengweitw/article/details/45584597

作者:nineheadedbird

目录
相关文章
|
1天前
|
数据可视化 测试技术
R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例
R语言线性混合效应模型(固定效应&随机效应)和交互可视化3案例
14 0
|
2天前
|
算法 Windows
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
R语言广义二次跳跃、非线性跳跃扩散过程转移函数密度的估计及其应用
14 0
|
5月前
05 离散·连续·多维随机变量及其分布 - 概念点
05 离散·连续·多维随机变量及其分布 - 概念点
28 0
|
5月前
20 误差分布曲线的建立 - 正态分布的时间简史
20 误差分布曲线的建立 - 正态分布的时间简史
23 0
|
5月前
|
数据挖掘 数据处理
17 误差分布曲线的建立 - 辛普森的研究
17 误差分布曲线的建立 - 辛普森的研究
28 0
|
8月前
|
数据采集 监控 算法
【分布鲁棒、状态估计】分布式鲁棒优化电力系统状态估计研究[几种算法进行比较](Matlab代码实现)
【分布鲁棒、状态估计】分布式鲁棒优化电力系统状态估计研究[几种算法进行比较](Matlab代码实现)
|
11月前
|
算法 量子技术
从实际代码出发了解量子相位估计算法的原理
从实际代码出发了解量子相位估计算法的原理
168 0
|
Web App开发 机器学习/深度学习 传感器
基于子空间的OFDM系统盲信道估计附matlab代码
基于子空间的OFDM系统盲信道估计附matlab代码
|
机器学习/深度学习 人工智能 开发者
正太分布 | 学习笔记
快速学习正太分布
129 0
正太分布 | 学习笔记
|
人工智能 开发者
卡方分布 | 学习笔记
快速学习卡方分布
91 0
卡方分布 | 学习笔记