概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布

使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用反函数法生成一个符合指数分布的随机变量(反函数求得为x=−ln(1−R)λx= -\frac{ln\left ( 1-R \right )}{\lambda })。指数分布的参数λ\lambda为getExpRandomValue函数中的参数lambda。生成一个指数分布的随机变量的代码如下,后面都将基于该函数生成一组负指数分布、K阶爱尔兰分布、2阶超指数分布随机变量,然后将生成的随机数通过matlab程序进行仿真,对随机数的分布特性进行验证。

public static double getExpRandomValue(double lambda)
{return (-1.0/lambda)*Math.log(1-SecureRandom.nextDouble());
}

生成一组参数为lambda(λ\lambda)的负指数分布的随机变量

通过下面的函数生成一组λ\lambda参数为lambda的随机变量,其中size表示随机变量的个数。通过该函数生成之后,可以将这些随机值保存在文件中,以备分析和验证,比如保存在exp.txt文件中,供下面介绍的matlab程序分析。

    public static double[] genExp(int size, double lambda){double[] array = new double[size];while(--size>=0) { array[size] = getExpRandomValue(lambda);}return array;}

通过genExp(1000000, 0.2)生成1000000个λ\lambda参数为0.2的随机变量,然后保存到exp.txt中,然后使用下面的matlab程序对这些随机数的性质进行验证,如果这些随机数符合λ\lambda=0.2的负指数分布,则其均值应为1/λ1/\lambda,即1/0.2=5,其方差应为1/λ2=1/(0.2∗0.2)=251/{\lambda }^{2}=1/(0.2*0.2)=25。然后对这些随机数的概率分布进行统计分析,以长度为1的区间为统计单位,统计各区间内随机数出现的频数,求出在各区间的概率,绘制图形,与参数为λ\lambda 的真实负指数分布曲线进行对比。以下为matlab代码。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%测试以λ=0.2为参数的负指数分布
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%randomValues = load ('d:/exp.txt');%从文件导入生成的随机数
X = 1:1:80;%以长度为1的区间为统计单位,统计1~80内的随机数频数m = mean(randomValues);%计算平均值,如果生成的随机数正确,均值应=1/λ=1/0.2=5
d = var(randomValues);%计算方差,方差应=1/λ^2=1/(0.2^2)=25all_count = length(randomValues);%随机数个数,方面后面将频数转成概率
[f,xout] = hist(randomValues, X);%按区间统计频数
for i=1:length(X)f(i) = f(i)/all_count;%频数转概率end;Y = 0.2*exp(-1*0.2*X);%画出λ=0.2的负指数分布概密函数曲线
plot(X,f,X,Y,'r');%与随机生成的概密函数曲线对比
grid on;%显示格线
legend('统计曲线','实际曲线');%图形注解title_str = sprintf('参数:0.2  均值:%d  方差:%d', m, d);
title(title_str);

如下图所示,均值为4.996423,约等于5,方差为24.96761,约等于25,与实际情况相符。此外,通过matlab统计的概率密度函数曲线与真实曲线基本重合(其中在0-1之间没有重合的原因是,实际情况是在0-1之间有无数个点,而matlab统计时以1为一个区间进行统计,只生成了一个统计项,而这无数个点的概率全部加到1点处,因此两条线没有重合,而且1点处的值远大于实际值,如果统计单位划分越细,0-1之间的拟合度更高),表明生成的随机数符合负指数分布。

生成一组参数为lambda(λ\lambda)的k阶爱尔兰分布的随机变量

通过下面的函数生成一组λ\lambda参数为lambda的k阶爱尔兰分布随机变量,其中size表示随机变量的个数,k表示阶数。由于k阶爱尔兰分布是k个相同lambda的负指数分布的串联,因此可以将连续k个负指数分布的随机变量相加成为一个爱尔兰分布的随机变量,从而生成爱尔兰分布的随机变量,如下面程序所示。通过该函数生成之后,可以将这些随机值保存在文件中,以备分析和验证,比如保存在erlang_k.txt文件中,供下面介绍的matlab程序分析。

    public static double[] genErlang(int size, double lambda, int k){double[] array = new double[size];while(--size>=0) { for(int i = 0; i<k; i++)array[size] += getExpRandomValue(lambda);}return array;}

通过genErlang(1000000, 0.2, 2)、genErlang(1000000, 0.2, 4)、genErlang(1000000, 0.2, 8)分别生成1000000个 λ\lambda 参数为0.2的2、4、8阶爱尔兰随机变量,然后分别保存到erlang_2.txt、erlang_4.txt、erlang_8.txt中,然后使用下面的matlab程序对这些随机数的性质进行验证,验证的方法与上面相同,对于k=2,则其均值应为k/λk/\lambda,即2/0.2=10,其方差应为k/λ2=2/(0.2∗0.2)=50k/\lambda^2=2/(0.2*0.2)=50;同理,对于k=4,均值应等于20,方差应等于100;对于k=8,均值应等于40,方差应等于200。下图为matlab代码。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%测试以λ=0.2为参数,K分别为2、4、8的爱尔兰分布
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%randomValues_2 = load ('d:/erlang_2.txt');%从文件导入生成的λ=0.2 K=2的随机数
randomValues_4 = load ('d:/erlang_4.txt');%从文件导入生成的λ=0.2 K=4的随机数
randomValues_8 = load ('d:/erlang_8.txt');%从文件导入生成的λ=0.2 K=8的随机数
X = 1:1:80;%以长度为1的区间为统计单位,统计1~80内的随机数频数m_2 = mean(randomValues_2);%计算平均值,如果生成的随机数正确,均值应=K/λ=2/0.2=10
d_2 = var(randomValues_2);%计算方差,方差应=K/λ^2=2/(0.2^2)=50m_4 = mean(randomValues_4);%计算平均值,如果生成的随机数正确,均值应=K/λ=4/0.2=20
d_4 = var(randomValues_4);%计算方差,方差应=K/λ^2=4/(0.2^2)=100m_8 = mean(randomValues_8);%计算平均值,如果生成的随机数正确,均值应=K/λ=8/0.2=40
d_8 = var(randomValues_8);%计算方差,方差应=1/λ^2=8/(0.2^2)=200all_count_2 = length(randomValues_2);%随机数个数,方面后面将频数转成概率
[f_2,xout_2] = hist(randomValues_2, X);%按区间统计频数
for i=1:length(X)f_2(i) = f_2(i)/all_count_2;%频数转概率end;all_count_4 = length(randomValues_4);%随机数个数,方面后面将频数转成概率
[f_4,xout_4] = hist(randomValues_4, X);%按区间统计频数
for i=1:length(X)f_4(i) = f_4(i)/all_count_4;%频数转概率end;all_count_8 = length(randomValues_8);%随机数个数,方面后面将频数转成概率
[f_8,xout_8] = hist(randomValues_8, X);%按区间统计频数
for i=1:length(X)f_8(i) = f_8(i)/all_count_8;%频数转概率end;plot(X,f_2,'r',X,f_4,'g',X,f_8,'b');str1 = sprintf('k:2 m:%d d:%d', m_2, d_2);
str2 = sprintf('k:4 m:%d d:%d', m_4, d_4);
str3 = sprintf('k:8 m:%d d:%d', m_8, d_8);
legend(str1,str2,str3); %图形注解

如下图所示,k=2时,均值为9.992167,约等于10,方差为49.93048,约等于50;k=4时,均值为20.00298,约等于20,方差为100.4140,约等于100;k=8时,均值为40.03118,约等于40,方差为200.4146,约等于200,以上结果都与实际情况符合。

生成一组2阶超指数分布的随机变量

通过下面的函数生成一组 λ\lambda 参数分别为lambda1和lambda2的2阶超指数分布随机变量,其中size表示随机变量的个数,lambda1和lambda2表示两个负指数分布的 λ\lambda 参数,这里指定进入分支1的概率为α1,进入分支2的概率为α2。由于2阶超指数分布是2个 λ\lambda 参数分别为lambda1和lambda2的负指数分布的并联,且以一定概率进入各分支,因此可以根据概率随机的从两个 λ\lambda 参数不同的负指数分布中抽取一个随机变量作为一个超指数分布的随机变量,如下面程序所示。通过该函数生成之后,可以将这些随机值保存在文件中,以备分析和验证,比如保存在hyper_exp.txt文件中,供下面介绍的matlab程序分析。

    public static double[] genHyperExp(int size, double lambda1, double lambda2){double a1 = 0.3;//a1:进入分支1的概率   因此a2=1-a1=0.7double[] array = new double[size];while(--size>=0) { if(SecureRandom.nextDouble()>a1)array[size] = getExpRandomValue(lambda2);elsearray[size] = getExpRandomValue(lambda1);}return array;}

通过genHyperExp(1000000, 0.2, 0.5)生成1000000个 参数分别为0.2和0.5,α1=0.3、α2=0.7的超指数分布随机变量,然后保存到hyper_exp.txt中,使用下面的matlab程序对这些随机数的性质进行验证,验证的方法与上面相同,如果生成的随机数正确,均值应=α1/λ1+α2/λ2=0.3/0.2+0.7/0.5=2.9,方差应=2*(α1/λ1^2+α2/λ2^2)-(α1/λ1+α2/λ2)^2=12.19。下图为matlab代码。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%测试λ1=0.2、λ1=0.5、α1=0.3、α2=0.7的2阶超指数分布
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%randomValues = load ('d:/hyper_exp.txt');%从文件导入生成的随机数
X = 1:1:80;%以长度为1的区间为统计单位,统计1~80内的随机数频数m = mean(randomValues);%计算平均值,如果生成的随机数正确,均值应=α1/λ1+α2/λ2=0.3/0.2+0.7/0.5=2.9
d = var(randomValues);%计算方差,方差应=2*(α1/λ1^2+α2/λ2^2)-(α1/λ1+α2/λ2)^2=12.19all_count = length(randomValues);%随机数个数,方面后面将频数转成概率
[f,xout] = hist(randomValues, X);%按区间统计频数
for i=1:length(X)f(i) = f(i)/all_count;%频数转概率end;plot(X,f);
grid on; % 显示格线
title_str = sprintf('均值:%d  方差:%d', m, d);
title(title_str);

如下图所示,均值为2.896629,约等于2.9,方差为12.17702,约等于12.19,以上结果与实际情况符合。

概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布相关推荐

  1. 控制工程基础MATLAB仿真实验,控制工程基础实验指导书——MATLAB仿真部分.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab 控制工程基础实验指导书--MATLAB仿真部分.d ...

  2. hata模型仿真matlab程序,Okumura-Hata模型损耗信道仿真源码程序|matlab assignment代做...

    核心提示:Okumura-Hata模型损耗信道仿真源码程序|matlab assignment代做... Okumura-Hata模型损耗信道仿真源码程序|matlab assignment代做 fu ...

  3. 同步电机matlab设计,同步发电机matlab仿真 同步电机模型的MATLAB仿真毕业设计.doc...

    同步发电机matlab仿真 同步电机模型的MATLAB仿真毕业设计 PAGE PAGE 1 同步发电机matlab仿真 同步电机模型的MATLAB仿真毕业设计 导读:就爱阅读网友为您分享以下" ...

  4. matlab计算原点矩,关于用matlab求样本均值方差以及k阶原点矩的matlab程序

    关于用matlab求样本均值方差以及k阶原点矩的matlab 程序 关于用matlab求样本均值和方差以及matlab程 序 1n1. 样本均值,公式xX,(其中X为样本).程序如下: ,i,1in ...

  5. 半波振子天线辐射功率MATLAB仿真,实验一半波振子天线仿真设计

    <实验一半波振子天线仿真设计>由会员分享,可在线阅读,更多相关<实验一半波振子天线仿真设计(9页珍藏版)>请在人人文库网上搜索. 1.实验一 半波振子天线仿真设计一. 实验目的 ...

  6. matlab gui 二阶系统,实验二 二阶系统matlab仿真(dg).doc

    利用simulink进行仿真的步骤: 打开Matlab软件: 在Command Window命令行>>后输入simulink并回车或点击窗口上部图标直接进入simulink界面: 点击Fi ...

  7. 微分环节的matlab仿真,典型环节的MATLAB仿真 实验二.doc

    典型环节的MATLAB仿真 实验二 实验六① 典型环节的MATLAB仿真 实验内容 1.按下列各典型环节的传递函数,建立相应的SIMULINK仿真模型,观察并记录其单位阶跃响应波形. ① 比例环节 S ...

  8. matlab仿真参考文献,仿真实验论文,关于MATLAB系统仿真课程教学改革相关参考文献资料-免费论文范文...

    导读:本论文是一篇免费优秀的关于仿真实验论文范文资料,可用于相关论文写作参考. (湖北文理学院物理与电子工程学院 湖北襄阳 441053) 摘 要:为了进一步提高MATLAB及系统仿真课程的教学质量, ...

  9. matlab仿真参考文献,学生仿真论文,关于《MATLAB仿真》课程教学改革和相关参考文献资料-免费论文范文...

    导读:该文是关于学生仿真论文范文,为你的论文写作提供相关论文资料参考. 樊春霞 (南京邮电大学自动化学院,江苏 南京 210003) 摘 要: MATLAB软件是科学研究.工程技术以及管理决策等领域内 ...

最新文章

  1. MPSOC之3——centos环境配置及petalinux安装及使用
  2. Django之session
  3. NET问答: 如何按属性进行 Distinct() ?
  4. 为什么要给计算机配置IP地址,更改ip地址 为何要重启电脑
  5. linux 驱动 (2)---Linux input子系统最清晰、详尽的分析
  6. python opencv 摄像头标定_(五)单目摄像头标定与畸变矫正(C++,opencv)
  7. Cognos 增加全局类
  8. 关于配置了数据库方言为MySQLInnoDBDialect后Hibernate不能自动建表的问题
  9. 高通平台开发系列讲解(外设篇)BMI160基本配置
  10. PyCharm添加背景图片
  11. 【人类简史】从动物到上帝 [以色列-尤瓦尔 · 赫拉利](阅读笔记)
  12. precede和previous_构词法词缀
  13. 如何手动控制Mac的风扇
  14. iPhone6和iPhone6Plus的适配
  15. linux unlink函数作用,unlink函数的作用
  16. ZCMU - 1919: kirito‘s 星爆气流斩
  17. FSR薄膜压力传感器使用教程
  18. 计算机科学与技术军训,计算机科学与技术学院召开2018级新生军训动员大会
  19. dlut1216-位运算(异或)水题
  20. 如果大家看了我的tools专栏,里面的小工具有不少,我提炼出来给大家——调用system函数

热门文章

  1. 前端get和post请求的入门总结
  2. sql截取时分:15小时26分钟
  3. 体验Windows自带远程桌面 局域网外网
  4. openstack及其核心组件
  5. 钗头凤/红酥手/世情薄——陆游/唐婉
  6. 2022低压电工试题及在线模拟考试
  7. 计算机无法使用标准账号,win10标准账户为何打不开其他应用
  8. VUE/使用echarts格式化浮窗自定义按钮及事件
  9. HR问:“你为什么离开上一家公司?”,完美解答
  10. 开发视频直播软件需要注重哪些功能?