资源描述:
《《Matlab生成随机数》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/7/22生成随机数教材2021/7/222021/7/22主要内容生成一元分布随机数生成多元分布随机数蒙特卡洛方法2021/7/22第一节生成一元分布随机数2021/7/22一、均匀分布随机数和标准正态分布随机数调用格式:Y=randY=rand(n)Y=rand(m,n)Y=rand([mn])Y=rand(m,n,p,…)Y=rand([mnp…])Y=rand(size(A))1.rand函数2021/7/22在MATLAB7.7以前的版本中,rand函数还可以这样调用:rand(method,s)s=rand(method)其中method是字符串变量,它
2、的可能取值如下表所列:2021/7/22调用格式:与rand函数类似2.randn函数2021/7/22%设置随机数生成器的算法为MersenneTwister算法,初始种子为1>>rand('twister',1);%生成2行6列的随机数矩阵,其元素服从[0,1]上均匀分布>>x1=rand(2,6)【例4.1-1】设置随机数生成器的算法为MersenneTwister算法,生成均匀分布随机数矩阵2021/7/22二、RandStream类MATLAB7.7及以后的版本中,依然支持rand函数的上述两种调用方式,但已经是过时的调用方式了,因为MATLAB7.7中对生成随机
3、数作了重大调整,给出了RandStream(随机数流)类,通过调用类的构造函数并传递合适的参数可以创建类对象,然后调用类对象的rand,randn,randi,randperm方法生成随机数。2021/7/22RandStream类方法列表1.创建RandStream类对象2021/7/22调用格式:s=RandStream('gentype')[…]=RandStream('gentype','param1',val1,'param2',val2,…)2.RandStream函数的调用方法gentype有6个可能的取值:mcg16807、mlfg6331_64、mrg32
4、k3a、mt19937ar、shr3cong和swb2712,对应随机数生成器的6个不同算法,默认值为mt19937ar2021/7/22%创建一个RandStream类对象s,其随机数生成器的算法为‘mlfg6331_64’,初始种子为10,对象s的randn方法的算法为'Inversion'>>s=RandStream('mlfg6331_64','seed',10,'RandnAlg','Inversion');%调用对象s的randn方法生成10行10列的随机数矩阵x,其元素服从标准正态分布>>x=s.randn(10)>>y=x(:);%将x按列拉长成一个列向量>
5、>hist(y)%绘制频数直方图>>xlabel('标准正态分布随机数');%为X轴加标签>>ylabel(‘频数’);%为Y轴加标签【例4.1-2】调用RandStream函数创建一个指定随机数生成算法的RandStream类对象,然后利用对象的randn方法生成10×10的标准正态分布随机数矩阵,并将矩阵按列拉长,画出频数直方图2021/7/22三、常见一元分布随机数MATLAB统计工具箱中函数名以rnd三个字符结尾的函数用来生成常见分布的随机数。例如:betarndBeta分布exprnd指数分布gamrndGamma分布lognrnd对数正态分布normrnd正态分
6、布poissrnd泊松分布randsample从有限总体中随机抽样random指定分布2021/7/22%调用normrnd函数生成1000行3列的随机数矩阵x,其元素服从均值为75,标准差为8的正态分布>>x=normrnd(75,8,1000,3);>>hist(x)%绘制矩阵x每列的频数直方图>>xlabel('正态分布随机数(mu=75,sigma=8)');%为X轴加标签>>ylabel('频数');%为Y轴加标签>>legend('第一列','第二列','第三列')%为图形加标注框【例4.1-3】调用normrnd函数生成1000×3的正态分布随机数矩阵,其
7、中均值为75,标准差为8,并作出各列的频数直方图2021/7/22%调用normrnd函数生成1000行3列的随机数矩阵x,其各列元素分别服从不同的正态分布>>x=normrnd(repmat([01540],1000,1),repmat([123],1000,1),1000,3);>>hist(x,50)%绘制矩阵x每列的频数直方图>>xlabel('正态分布随机数');%为X轴加标签>>ylabel('频数');%为Y轴加标签%为图形加标注框>>legend('mu=0,sigma=1','mu=15,