MATLAB伪随机数发生器
MATLAB产生各种分布的随机数
M A T L A B产生各种分布的随机数The final revision was on November 23, 2020MATLAB产生各种分布的随机数1,均匀分布U(a,b):产生m*n阶[a,b]均匀分布U(a,b)的随机数矩阵:unifrnd (a,b,m, n) 产生一个[a,b]均匀分布的随机数:unifrnd (a,b)2,0-1分布U(0,1)产生m*n阶[0,1]均匀分布的随机数矩阵:rand (m, n)产生一个[0,1]均匀分布的随机数:rand4,二类分布binornd(N,P,mm,nn)如binornd(10,,mm,nn)即产生mm*nn均值为N*P的矩阵binornd(N,p)则产生一个。
而binornd(10,,mm)则产生mm*mm的方阵,军阵为N*p。
5,产生m*n阶离散均匀分布的随机数矩阵:unidrnd(N,mm,nn)产生一个数值在1-N区间的mm*nn矩阵6,产生mm nn阶期望值为的指数分布的随机数矩阵:exprnd( ,mm, nn)此外,常用逆累积分布函数表函数名调用格式函数注释norminv X=norminv(P,mu,sigma) 正态逆累积分布函数expinv X=expinv(P,mu) 指数逆累积分布函数weibinv X=weibinv(P,A,B) 威布尔逆累积分布函数logninv X=logninv(P,mu,sigma) 对数正态逆累积分布函数Chi2inv X=chi2inv(P,A,B) 卡方逆累积分布函数Betainv X=betainv(P,A,B) β分布逆累积分布函数随机数的产生4.1.1 二项分布的随机数据的产生命令参数为N,P的二项随机数据函数 binornd格式 R = binornd(N,P) %N、P为二项分布的两个参数,返回服从参数为N、P的二项分布的随机数,N、P大小相同。
R = binornd(N,P,m) %m指定随机数的个数,与R同维数。
matlab中的rng函数
matlab中的rng函数⼀、matlab中的随机函数有:rand、randn1、rand功能:⽣成0-1之间的伪随机数rand(2)%⽣成0-1之间的⽅阵ans =0.2785 0.95750.5469 0.9649rand(1,2)%⽣成1⾏2列的矩阵ans =0.1576 0.9706rand(1,2,'double')%⽣成1⾏2列的类型为double的随机数ans =0.9572 0.4854 2、randn功能:⽣成标准正态分布的伪随机数(均值为0,⽅差为1)使⽤的例⼦和上⾯⼀样⼆、rng函数的功能:控制随机函数的⽣成2.1⽤法⼀:rng(seed)rng(seed) 使⽤⾮负整数 seed 为随机数⽣成器提供种⼦,以使、和⽣成可预测的数字序列。
(seed⽤来控制rand和randn函数⽣成随机数,例如rand('seed',0)每次⽣成的随机数都是⼀样的)将当前⽣成器设置保存在 s 中:s = rng;调⽤ rand 以⽣成随机值向量:x = rand(1,5)x =0.8147 0.9058 0.1270 0.9134 0.6324通过调⽤ rng 还原原始⽣成器设置。
⽣成⼀组新的随机值并验证 x 和 y 是否相等:rng(s);y = rand(1,5)y =0.8147 0.9058 0.1270 0.9134 0.63242.2⽤法⼆:rng('shuffle') 根据当前时间为随机数⽣成器提供种⼦。
这样,rand、randi 和 randn 会在您每次调⽤ rng 时⽣成不同的数字序列。
2.3⽤法三:rng(seed,generator)、rng('shuffle',generator)制定随机数⽣成的类型,因为我们使⽤的是算法来⽣成随机数的,故指定的便是算法的类型'twister':梅森旋转'simdTwister':⾯向 SIMD 的快速梅森旋转算法'combRecursive':组合多递归'philox':执⾏ 10 轮的 Philox 4×32 ⽣成器'threefry':执⾏ 20 轮的 Threefry 4×64 ⽣成器'multFibonacci':乘法滞后 Fibonacci'v5uniform':传统 MATLAB® 5.0 均匀⽣成器'v5normal':传统 MATLAB 5.0 正常⽣成器'v4':传统 MATLAB 4.0 ⽣成器2.4⽤法四:rng('default')rng('default') 将 rand、randi 和 randn 使⽤的随机数⽣成器的设置重置为其默认值。
随机信号分析实验报告(基于MATLAB语言)
随机信号分析实验报告——基于MATLAB语言姓名:_班级:_学号:专业:目录实验一随机序列的产生及数字特征估计 (2)实验目的 (2)实验原理 (2)实验内容及实验结果 (3)实验小结 (6)实验二随机过程的模拟与数字特征 (7)实验目的 (7)实验原理 (7)实验内容及实验结果 (8)实验小结 (11)实验三随机过程通过线性系统的分析 (12)实验目的 (12)实验原理 (12)实验内容及实验结果 (13)实验小结 (17)实验四窄带随机过程的产生及其性能测试 (18)实验目的 (18)实验原理 (18)实验内容及实验结果 (18)实验小结 (23)实验总结 (23)实验一随机序列的产生及数字特征估计实验目的1.学习和掌握随机数的产生方法。
2.实现随机序列的数字特征估计。
实验原理1.随机数的产生随机数指的是各种不同分布随机变量的抽样序列(样本值序列)。
进行随机信号仿真分析时,需要模拟产生各种分布的随机数。
在计算机仿真时,通常利用数学方法产生随机数,这种随机数称为伪随机数。
伪随机数是按照一定的计算公式产生的,这个公式称为随机数发生器。
伪随机数本质上不是随机的,而且存在周期性,但是如果计算公式选择适当,所产生的数据看似随机的,与真正的随机数具有相近的统计特性,可以作为随机数使用。
(0,1)均匀分布随机数是最最基本、最简单的随机数。
(0,1)均匀分布指的是在[0,1]区间上的均匀分布, U(0,1)。
即实际应用中有许多现成的随机数发生器可以用于产生(0,1)均匀分布随机数,通常采用的方法为线性同余法,公式如下:,序列为产生的(0,1)均匀分布随机数。
定理1.1若随机变量X 具有连续分布函数,而R 为(0,1)均匀分布随机变量,则有2.MATLAB中产生随机序列的函数(1)(0,1)均匀分布的随机序列函数:rand用法:x = rand(m,n)功能:产生m×n 的均匀分布随机数矩阵。
(2)正态分布的随机序列函数:randn用法:x = randn(m,n)功能:产生m×n 的标准正态分布随机数矩阵。
伪随机序列发生器
伪随机序列发生器一、实验目的:理解伪随机序列发生器的工作原理以及实现方法,掌握MATLAB\DSP BUILDER设计的基本步骤和方法。
二、实验条件:1. 安装WindowsXP系统的PC机;2. 安装QuartusII6.0 EDA软件;的序列发生器,并通⒈ ⒉ ⒊⒋⒌⒍⒎⒏⒐ ⒑ ⒒⒓⒔⒕⒖⒗四、实验原理:对于数字信号传输系统,传送的数字基带信号(一般是一个数字序列),由于载有信息,在时间上往往是不平均的(比如数字化的语音信号),对应的数字序列编码的特性,不利于数字信号的传输。
对此,可以通过对数字基带信号预先进行“随机化”(加扰)处理,使得信号频谱在通带内平均化,改善数字信号的传输;然后在接受端进行解扰操作,恢复到原来的信号。
伪随机序列广泛应用与这类加扰与解扰操作中。
我们下面用DSP BUILDER来构建一中伪随机序列发生器——m序列发生器,这是一种很常见的伪随机序列发生器,可以由线性反馈器件来产生,如下图:其特征多项式为:()∑==ni i i x C x F 0注:其中的乘法和加法运算都是模二运算,即逻辑与和逻辑或。
可以证明,对于一个n 次多项式,与其对应的随机序列的周期为。
12−n 接下来我们以为例,利用DSP BUILDER 构建这样一个伪随机序列发生器。
125++x x开Simulink 浏览器。
Simulink我们可以看到在Simulink 工作库中所安装的Altera DSP Builder 库。
2. 点击Simulink 的菜单File\New\Model 菜单项,新建一个空的模型文件。
3. 按照下图在Model编辑器的工作区中放置如下的模型:其中Logical Bit Operator模块在Gate & Control库中,把它拖到工作区中后双击打开参数设置对话框,设置成2输入异或门。
为了能够在Matlab中获得仿真结果,可以给输出再添加一个示波器Scope,这个模型在Simulink标准库的Sources库中。
MATLAB产生各种分布的随机数
MATLAB产生各种分布的随机数1,均匀分布Ua,b:产生mn阶a,b均匀分布Ua,b的随机数矩阵:unifrnd a,b,m, n产生一个a,b均匀分布的随机数:unifrnd a,b2,0-1分布U0,1产生mn阶0,1均匀分布的随机数矩阵:rand m, n产生一个0,1均匀分布的随机数:rand4,二类分布binorndN,P,mm,nn如binornd10,,mm,nn即产生mmnn均值为NP的矩阵binorndN,p则产生一个;而binornd10,,mm则产生mmmm的方阵,军阵为Np; 5,产生mn阶离散均匀分布的随机数矩阵:unidrndN,mm,nn产生一个数值在1-N区间的mmnn矩阵6,产生mm nn阶期望值为的指数分布的随机数矩阵:exprnd ,mm, nn此外,常用逆累积分布函数表函数名调用格式函数注释norminv X=norminvP,mu,sigma 正态逆累积分布函数expinv X=expinvP,mu 指数逆累积分布函数weibinv X=weibinvP,A,B 威布尔逆累积分布函数logninv X=logninvP,mu,sigma 对数正态逆累积分布函数Chi2inv X=chi2invP,A,B 卡方逆累积分布函数Betainv X=betainvP,A,B β分布逆累积分布函数随机数的产生4.1.1 二项分布的随机数据的产生命令参数为N,P的二项随机数据函数 binornd格式 R = binorndN,P %N、P为二项分布的两个参数,返回服从参数为N、P的二项分布的随机数,N、P大小相同;R = binorndN,P,m %m指定随机数的个数,与R同维数;R = binorndN,P,m,n %m,n分别表示R的行数和列数例4-1>> R=binornd10,R =3>> R=binornd10,,1,6R =8 1 3 7 6 4>> R=binornd10,,1,10R =6 8 4 67 5 3 5 6 2>> R=binornd10,,2,3R =7 5 86 5 6>>n = 10:10:60;>>r1 = binorndn,1./nr1 =2 1 0 1 1 2>>r2 = binorndn,1./n,1 6r2 =0 1 2 1 3 14.1.2 正态分布的随机数据的产生命令参数为μ、σ的正态分布的随机数据函数 normrnd格式 R = normrndMU,SIGMA %返回均值为MU,标准差为SIGMA的正态分布的随机数据,R可以是向量或矩阵;R = normrndMU,SIGMA,m %m指定随机数的个数,与R同维数;R = normrndMU,SIGMA,m,n %m,n分别表示R的行数和列数例4-2>>n1 = normrnd1:6,1./1:6n1 =>>n2 = normrnd0,1,1 5n2 =>>n3 = normrnd1 2 3;4 5 6,,2,3 %mu为均值矩阵n3 =>> R=normrnd10,,2,3 %mu为10,sigma为的2行3列个正态随机数R =4.1.3常见分布的随机数产生常见分布的随机数的使用格式与上面相同表4-1随机数产生函数表函数名调用形式注释UnifrndunifrndA,B,m,nA,B上均匀分布连续随机数UnidrndunidrndN,m,n均匀分布离散随机数Exprnd exprndLambda,m,n参数为Lambda的指数分布随机数NormrndnormrndMU,SIGMA,m,n参数为MU,SIGMA的正态分布随机数chi2rndchi2rndN,m,n自由度为N的卡方分布随机数TrndtrndN,m,n自由度为N 的t分布随机数Frnd frndN1, N2,m,n 第一自由度为N1,第二自由度为N2的F分布随机数gamrnd gamrndA, B,m,n 参数为A,B的分布随机数betarnd betarndA, B,m,n参数为A,B的分布随机数lognrndlognrndMU,SIGMA,m,n参数为MU,SIGMA的对数正态分布随机数nbinrndnbinrndR,P,m,n参数为R,P的负二项式分布随机数ncfrndncfrndN1,N2,delta,m,n参数为N1,N2,delta的非中心F分布随机数nctrndnctrndN,delta,m,n参数为N,delta的非中心t分布随机数ncx2rndncx2rndN,delta,m,n参数为N,delta的非中心卡方分布随机数raylrndraylrndB,m,n参数为B的瑞利分布随机数weibrndweibrndA,B,m,n参数为A,B的韦伯分布随机数binorndbinorndN,P,m,n参数为N,p的二项分布随机数georndgeorndP,m,n参数为p的几何分布随机数hygerndhygerndM,K,N,m,n参数为M,K,N的超几何分布随机数Poissrnd poissrndLambda,m,n参数为Lambda的泊松分布随机数4.1.4通用函数求各分布的随机数据命令求指定分布的随机数函数randomvar cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120136格式y=random'name',A1,A2,A3,m,n%name的取值见表4-2;A1,A2,A3为分布的参数;m,n指定随机数的行和列例4-3产生123行4列个均值为2,标准差为的正态分布随机数>> y=random'norm',2,,3,4 y =随机变量的概率密度计算4.2.1 通用函数计算概率密度函数值命令通用函数计算概率密度函数值函数pdf格式Y=pdfname,K,AY=pdfname,K,A,B Y=pdfname,K,A,B,C说明返回在X=K处、参数为A、B、C的概率密度值,对于不同的分布,参数个数是不同;name为分布函数名,其取值如表4-2;表4-2 常见分布函数表name的取值函数说明'beta' 或'Beta' Beta分布'bino' 或'Binomial' 二项分布'chi2' 或'Chisquare' 卡方分布'exp' 或'Exponential' 指数分布'f' 或'F'F分布'gam' 或'Gamma' GAMMA分布'geo' 或'Geometric'几何分布'hyge' 或'Hypergeometric' 超几何分布'logn' 或'Lognormal'对数正态分布'nbin' 或'Negative Binomial' 负二项式分布'ncf' 或'Noncentral F' 非中心F分布'nct' 或'Noncentral t'非中心t分布'ncx2' 或'Noncentral Chi-square' 非中心卡方分布'norm' 或'Normal' 正态分布'poiss' 或'Poisson' 泊松分布'rayl' 或'Rayleigh' 瑞利分布't' 或'T'T分布'unif' 或'Uniform'均匀分布'unid' 或'Discrete Uniform' 离散均匀分布'weib'或'Weibull'Weibull分布例如二项分布:设一次试验,事件A发生的概率为p,那么,在n次独立重复试验中,事件A恰好发生K次的概率P_K为:P_K=P{X=K}=pdf'bino',K,n,p例4-4 计算正态分布N0,1的随机变量X在点的密度函数值;Matlab 的随机函数高斯分布均匀分布其它分布Matlab中随机数生成器主要有:betarnd 贝塔分布的随机数生成器binornd 二项分布的随机数生成器chi2rnd 卡方分布的随机数生成器exprnd 指数分布的随机数生成器frnd f分布的随机数生成器gamrnd 伽玛分布的随机数生成器geornd 几何分布的随机数生成器hygernd 超几何分布的随机数生成器lognrnd 对数正态分布的随机数生成器nbinrnd 负二项分布的随机数生成器ncfrnd 非中心f分布的随机数生成器nctrnd 非中心t分布的随机数生成器ncx2rnd 非中心卡方分布的随机数生成器normrnd 正态高斯分布的随机数生成器,normrnda,b,c,d:产生均值为a、方差为b大小为cXd的随机矩阵poissrnd 泊松分布的随机数生成器rand:产生均值为、幅度在0~1之间的伪随机数,randn:生成0到1之间的n阶随机数方阵,randm,n:生成0到1之间的m×n的随机数矩阵randn:产生均值为0、方差为1的高斯白噪声,使用方式同rand注:rand是0-1的均匀分布,randn是均值为0方差为1的正态分布randpermn:产生1到n的均匀分布随机序列raylrnd 瑞利分布的随机数生成器trnd 学生氏t分布的随机数生成器unidrnd 离散均匀分布的随机数生成器unifrnd 连续均匀分布的随机数生成器weibrnd 威布尔分布的随机数生成器以下介绍利用Matlab产生均值为0,方差为1的符合正态分布的高斯随机数;我们利用的函数为normrnda,b,c,d:产生均值为a、标准为b大小为cXd的随机矩阵,它有如下三种参数形式:R=normrndμ,σR=normrndμ,σ:生成服从正态分布μ参数代表均值,σ参数代表标准差的随机数;输入的向量或矩阵μ和σ必须形式相同,输出R也和它们形式相同;标量输入将被扩展成和其它输入具有相同维数的矩阵;R=normrndμ,σ,mR=norrmrndμ,σ,m:生成服从正态分布μ参数代表均值,σ参数代表标准差的随机数矩阵,矩阵的形式由m定义;m是一个1×2向量,其中的两个元素分别代表返回值R中行与列的维数;R=normrndμ,σ,m,nR=normrndμ,σ,m,n:生成m×n形式的正态分布的随机数矩阵;其中μ为均值,σ为标准方差,m、n为矩阵大小;----------------------------------------------------------------->> R = normrnd0,1,4,4 %产生4×4的标准正态分布矩阵R =>> varR %默认方差公式ans =>> varR,0 %默认方差公式N-1ans =>> varR,1 %方差公式Nans =>> varR,0,1 %列操作,第二参数为方差方式,第三参数为行、列标记ans =>> varR,0,2 %行操作,第二参数为方差方式,第三参数为行、列标记ans =>> varR' %check the ansans =>> varR: %矩阵所有元素的方差ans =。
matlab中用rng替换rand(seed,sd)、randn(seed,sd)和ran。。。
matlab中⽤rng替换rand(seed,sd)、randn(seed,sd)和ran。
1. rand('seed',sd)、randn('seed',sd)和rand('state',sd)中各参数的含义我们知道,rand和randn都是⽤来产⽣伪随机数的,但是产⽣伪随机数的generator(发⽣器)有多种,⽽seed、state、twister等就是⽤来指定不同类型的伪随机数发⽣器的,其中seed 指“v4 generator”,state指“v5 generator”,twister指"Mersenne Twister generator"。
第⼆个参数“sd”是“seed”的缩写,表⽰发⽣器的种⼦点,这个值将作为generator的输⼊,⽤于产⽣伪随机数。
这⾥有必要先解释⼀下随机数和伪随机数的本质区别:随机数是在某次产⽣过程中,按照实验过程中表现的分布概率随机产⽣的,其结果是不可预测的,不可重复的;⽽伪随机数则是按照⼀定算法模拟产⽣的,其结果是确定的,可重复的。
当然这⾥的确定和可重复是指给定相同的初始值,算法模拟将产⽣相同的输出。
2. 为什么要⽤rand('seed',sd)、randn('seed',sd)和rand('state',sd)在实际应⽤中,⽐如检查程序问题时,为了重现错误,我们可能希望产⽣相同的伪随机数,这个时候就需要⽤这些表达式了。
正如前⾯所说的,如果选⽤相同的generator并设置相同的初始值sd,那么你就可以得到同样伪随机数。
举个例⼦:rand('seed',0); %选定generator并设定初始值a=rand(3,3);rand('seed',0);%设定同样的generator和相同的初始值b=rand(3,3);ab输出:a =0.218959186328090 0.679296405836612 0.5194163720679550.047044616214486 0.934692895940828 0.8309653461123660.678864716868319 0.383502077489859 0.034572110527461b =0.218959186328090 0.679296405836612 0.5194163720679550.047044616214486 0.934692895940828 0.8309653461123660.678864716868319 0.383502077489859 0.034572110527461对⽐后你会发现a和b相等。
matlab中randn(‘state’)
matlab中randn(‘state’)randn('state')随机数都是由RandStream随机数据流⽣成的(⾥⾯有⼀套固定的算法,⼀般⽤时间发⽣装置)。
其中就有'state','seed','twister'等参数。
‘state’是对随机发⽣器的状态进⾏初始化,并且定义该状态初始值。
⽐如你过⼀段时间还要使⽤这个随机数的时候,还能保持当前的随机取值。
⽐如randn('state',2013)a = randn(1)b = randn(1) 会发现与上⼀个随机值不⼀样如果再定义⼀次randn('state',2013)c = randn(1) 会发现与a的值⼀样(1)RANDN产⽣正态分布数的语法:RANDN(N) :产⽣N× N的矩阵,其元素是按正态分布的数组;RANDN(M,N) and RANDN([M,N]):产⽣M×N的矩阵;RANDN(M,N,P,...) or RANDN([M,N,P...])产⽣随机序列;(2)RANDN产⽣伪随机数的语法:发⽣器的状态决定所产⽣数的序号。
S = RANDN('state') 是⼀个⼆元向量,包括标准发⽣器的状态;RANDN('state',S):设置发⽣器的状态为S(即标准状态);RANDN('state',0):设置发⽣器的初始状态;RANDN('state',J):J为整数,设置发⽣器到J阶状态;(3)MATlAB 4.X应⽤⼀个单独的种⼦来产⽣随机数:RANDN('seed',0) and RANDN('seed',J)作⽤与RANDN('state',0)和RANDN('state',J)⼀样,但使⽤Matlab 4.x随机数发⽣器。
matlab随机数生成方法
Matlab 随机数生成方法(转自雅虎空间)第一种方法是用 random 语句,其一般形式为y = random('分布的英文名',A1,A2,A3,m,n),表示生成 m 行 n 列的m × n 个参数为 ( A1 , A2 , A3 ) 的该分布的随机数。
例如: (1) R = random('Normal',0,1,2,4): 生成期望为 0,标准差为 1 的(2 行 4 列)2× 4 个正态随机数(2) R = random('Poisson',1:6,1,6): 依次生成参数为 1 到 6 的(1 行 6 列)6 个Poisson 随机数第二种方法是针对特殊的分布的语句:一.几何分布随机数(下面的 P,m 都可以是矩阵)R = geornd(P) (生成参数为 P 的几何随机数)R = geornd(P,m) (生成参数为 P 的× m 个几何随机数)1R = geornd(P,m,n) (生成参数为 P 的 m 行 n 列的m × n 个几何随机数)例如(1) R = geornd(1./ 2.^(1:6)) ( 生成参数依次为 1/2,1/2^2,到 1/2^6 的 6 个几何随机数)(2) R = geornd,[1 5]) (生成参数为的(1行5列)5 个几何随机数).二.Beta 分布随机数R = betarnd(A,B) (生成参数为 A,B 的 Beta 随机数)R = betarnd(A,B,m) (生成× m 个数为 A,B 的 Beta 随机数)1R = betarnd(A,B,m,n) (生成 m 行 n 列的m × n 个数为 A,B 的 Beta 随机数).三.正态随机数R = normrnd(MU,SIGMA) (生成均值为 MU,标准差为 SIGMA 的正态随机数)R = normrnd(MU,SIGMA,m) (生成1× m 个正态随机数)R = normrnd(MU,SIGMA,m,n) (生成 m 行 n 列的m × n 个正态随机数)例如(1) R = normrnd(0,1,[1 5]) 生成 5 个正态(0,1) 随机数(2) R = normrnd([1 2 3;4 5 6],,2,3) 生成期望依次为[1,2,3;4,5,6], 方差为的2×3 个正态随机数.四.二项随机数:类似地有R = binornd(N,P) R = binornd(N,P,m) R = binornd(N,p,m,n)例如n = 10:10:60; r1 = binornd(n,1./n) 或 r2 = binornd(n,1./n,[1 6]) (都生成参数分别为1 1 ), L, ( 60, ) 的6个二项随机数.(10,10 60五.自由度为 V 的χ 2 随机数:R = chi2rnd(V) R = chi2rnd(V R = chi2rnd(V,m) ,m,n)六.期望为 MU 的指数随机数(即 Exp 随机数):1MUR = exprnd(MU) R = exprnd(MU,m) R = exprnd(MU,m,n)七.自由度为 V1, V2 的 F 分布随机数:R = frnd(V1,V2) R = frnd(V1, V2,m) R = frnd(V1,V2,m,n)八.Γ ( A, λ ) 随机数:R = gamrnd(A,lambda) R = gamrnd(A,lambda,m) R = gamrnd(A,lambda,m,n)九.超几何分布随机数:R = hygernd(N,K,M) R = hygernd(N,K,M,m) R = hygernd(N,K,M,m,n)十.对数正态分布随机数R = lognrnd(MU,SIGMA) R = lognrnd(MU,SIGMA,m) R = lognrnd(MU,SIGMA,m,n)十一.负二项随机数:R = nbinrnd(r,p) R = nbinrnd(r,p,m) R = nbinrnd(r,p,m,n)十二.Poisson 随机数:R = poissrnd(lambda) R = poissrnd(lambda,m) R = poissrnd(lambda,m,n) 例如,以下 3 种表达有相同的含义:lambda = 2; R = poissrnd(lambda,1,10) (或 R = poissrnd(lambda,[1 10]) 或 R = poissrnd(lambda(ones(1,10)))十三.Rayleigh 随机数:R = raylrnd(B) R = raylrnd(B,m) R = raylrnd(B,m,n)十四.V 个自由度的 t 分布的随机数:R = trnd(V) R = trnd(V,m) R = trnd(V,m,n)42十五.离散的均匀随机数:R = unidrnd(N) R = unidrnd(N,m) R = unidrnd(N,m,n)十六.[A,B] 上均匀随机数R = unifrnd(A,B) R = unifrnd(A,B,m) R = unifrnd(A,B,m,n)例如 unifrnd(0,1:6)与 unifrnd(0,1:6,[1 6]) 都依次生成[0,1] 到[0,6]的6个均匀随机数.:十七.Weibull 随机数R = weibrnd(A,B) R = weibrnd(A,B,m) R = weibrnd(A,B,m,n)Matlab 随机数小结1,rand 生成均匀分布的伪随机数。
matlab乘同余生成随机数
matlab乘同余生成随机数Matlab的乘同余算法是一种简单而常用的伪随机数生成方法,它可以生成在给定区间内均匀分布的随机数。
本文将介绍该算法的原理和使用方法。
1. 原理:乘同余算法基于一个简单的迭代公式,其中包含一个乘法和一个取模运算。
具体而言,它使用一个初始种子值x0,并根据以下公式生成下一个随机数x1,x2,...:```x_i+1 = (a * x_i + c) mod m```其中,a,c,和m是常数。
生成的随机数为x_i / m,通常情况下,这些常数需要精心选择以保证生成的随机数具有足够的随机性和均匀分布性。
2. 使用方法:在Matlab中,可以使用`rand()`函数来生成基于乘同余算法的随机数。
这个函数没有参数,每次调用都会生成一个[0, 1)范围内的随机数。
具体使用方法如下:```x = rand()```如果需要生成具有特定范围的随机数,例如[1, 100]之间的整数,可以使用以下代码:```x = randi([1, 100])```其中,'randi'函数用于生成整数随机数,'[1, 100]'参数指定了随机数范围。
3. 注意事项:- 乘同余算法本质上是一种伪随机数生成方法,即生成的随机数序列是确定的,并非真正的随机数。
这是因为在算法中使用了固定的公式和初始种子值。
- 在使用乘同余算法时,需要注意选择合适的常数。
常数的选择很关键,不同的常数会导致生成的随机数具有不同的性质。
如果常数选择不当,可能会导致生成的随机数不够随机或不均匀。
- 对于一些特定的应用场景,乘同余算法可能不适用。
例如,需要高度安全性的密码学应用,应该选择更为复杂和安全的随机数生成方法。
总结起来,Matlab中的乘同余算法是一种简单而常用的伪随机数生成方法,可以生成在给定区间内均匀分布的随机数。
使用该算法时,需要注意选择合适的常数,以确保生成的随机数具有足够的随机性和均匀分布性。
Matlab随机数产生的问题
Matlab随机数产生的问题2009-02-13 08:13这2天发现这个问题讨论较多,所以就搜索了一些资料。
发现自己之前的理解有些很有问题,同时欢迎大家继续讨论。
先澄清一下几个容易弄错的地方(也不一定全对)(1)用计算机产生的是“伪随机数”。
用投色子计数的方法产生真正的随机数 , 但电脑若也这样做 , 将会占用大量内存 ; 用噪声发生器或放射性物质也可产生真正的随机数 , 但不可重复 . 而用数学方法产生最适合计算机 , 这就是周期有限 , 易重复的” 伪随机数”(2)随机数的产生需要有一个随机的种子,因为用计算机产生的随机数是通过递推的方法得来的,必须有一个初始值。
(3)用同一台电脑,且在初始值和递推方法相同的情况下,可以产生相同的随机序列(由于以前每次使用randn或者rand得到都是不同值,所以曾经误以为相同的seed无法产生相同的序列)[size=2][color=red][b]一 matlab里产生随机数的方法[/b][/color][/size] matlab里和随机数有关的函数:(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数(2) randn:产生均值为0、方差为1的高斯白噪声(3) randperm(n):产生1到n的均匀分布随机序列(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵还有很多的扩展函数,不再一一列出。
不过他们都调用的是rand或者randn函数,由此可见在matlab里rand和randn是产生随机数的关键所在。
看来只有看他们的源文件了function [varargout] = randn(varargin)%%%help 文档的内容略去%%%if nargout == 0builtin('randn', varargin{:});else[varargout{1:nargout}] = builtin('randn', varargin{:});end从这里也看不出到底是怎么产生的,就只看到builtin。
4进制m序列matlab
4进制m序列matlab什么是4进制m序列?在数字和通信领域中,m序列是一种特殊的伪随机序列。
m序列是由m位二进制数组成,其中每个m位二进制数都是通过使用特定的反馈多项式生成。
这里的"m"代表序列中的二进制位数。
当m等于1时,m序列退化为标准的伯努利二进制随机序列,而当m大于1时,则可以构造出更长且更复杂的伪随机序列。
在本文中,我们将探讨4进制m序列在Matlab中的实现以及其在通信系统中的应用。
第一步:生成4进制m序列要在Matlab中生成4进制m序列,我们可以使用反馈多项式和移位寄存器来实现。
首先,我们需要选择适当的反馈多项式。
常用的4进制m序列的反馈多项式为"1 + z^3 + z^4",其中z代表数字滤波器的延迟因子。
然后,我们创建一个移位寄存器,其长度为m位,并将其初始化为一个非零的状态。
接下来,我们使用反馈多项式和移位寄存器的当前状态来计算下一个状态,并将其存储在一个数组中。
重复这个过程,直到我们获得所需长度的序列为止。
在Matlab代码中,这个过程如下所示:matlabfunction sequence = generate_m_sequence(m, length)feedback_polynomial = [1, 0, 0, 0, 1]; % Feedback polynomial: 1 +z^3 + z^4shift_register = [1, 1, 1, 1]; % Initial state of shift registersequence = zeros(1, length); % Initialize sequence arrayfor i = 1:lengthsequence(i) = shift_register(1); % Store current state in sequence arrayfeedback_bit = mod(sum(shift_register .* feedback_polynomial), 2); % Calculate feedback bitshift_register = circshift(shift_register.', -1).'; % Shift register to the leftshift_register(end) = feedback_bit; % Update last bit with feedback bitendend通过调用上述函数,我们可以生成4进制m序列。
m伪随机序列Matlab源代码
m伪随机序列Matlab源代码%5阶m序列% 在MATLAB命令窗口输入以下:% fbconnection=[0 1 0 0 1];% mseq=m_sequence(fbconnection);% mseqfunction[mseq]=m_sequence(fbconnection)n=length(fbconnection);N=2^n-1;register=[zeros(1,n-1) 1]; %移位寄存器的初始状态mseq(1)=register(n); %m序列的第一个输出码元for i=2:Nnewregister(1)=mod(sum(fbconnection.*register),2);for j=2:n,newregister(j)=register(j-1);end;register=newregister;mseq(i)=register(n);end有关m序列的有一个作业要做一个和m序列相关的,先是形成自相关m序列,然后生成其自相关序列,两个都要产生图像。
这些我都完成了。
后面要用matlab图像处理,作出一个类似于示波器的调节旋钮的东西,点击一下就对自相关序列的延迟进行一些调节,调节至m序列和其自相关函数一样。
各位牛人看看,给些指点,做了3天了,怎么都做不出来。
代码如下:%m序列发生器及其自相关和功率谱密度clear all; close all;g = 19; % G = 10011state = 8;% state=1000L = 1000;%m序列产生N = 15;mq = mgen(g,state,L);%求序列自相关ms = conv( 1-2*mq, 1-2*mq(15:-1:1) )/N;figure(1)subplot(222)stem(ms(15:end));axis([0 63 -0.3 1.2]);title('m序列自相关序列')%m序列构成的信号(矩形脉冲)N_sample=8;Tc = 1;dt = Tc/N_sample;t = 0:dt:Tc*L-dt;gt = ones(1,N_sample);mt = sigexpand(1-2*mq,N_sample);mt = conv(mt,gt);figure(1)subplot(221);plot(t,mt(1:length(t)));axis([0 63 -1.2 1.2]);title('m序列矩形成形信号')st = sigexpand( 1-2*mq(1:15),N_sample );s = conv(st,gt);st = s(1:length(st));rt1 = conv(mt,st(end:-1:1))/(N*N_sample);subplot(223)plot(t,rt1(length(st):length(st)+length(t)-1) );axis([0 63 -0.2 1.2]);title('m序列矩形成形信号的自相关');xlabel('t');%sinc脉冲Tc = 1;dt = Tc/N_sample;t = -20:dt:20;gt = sinc(t/Tc);mt = sigexpand(1-2*mq,N_sample);mt = conv(mt,gt);st2 = sigexpand( 1-2*mq(1:15),N_sample );s2 = conv(st2,gt);st2 = s2;rt2 = conv(mt,st2(end:-1:1))/(N*N_sample);subplot(224);t1 = -55+dt:dt:Tc*L-dt;%plot(t,mt(1:length(t)) );plot(t1,rt2(1:length(t1)));axis([0 63 -0.5 1.2]);title('m序列sinc成形信号的自相关');xlabel('t');。
基于matlab的伪随机序列生成及相关函数仿真实验
武夷学院实验报告课程名称:_扩频通信技术及应用_ 项目名称:基于matlab的伪随机序列生成及相关函数仿真实验姓名:翁开传__专业:__通信工程___ 班级:__2__学号:_40__同组成员_无___1注:1、实验预习部分包括实验环境准备和实验所需知识点准备。
2、若是单人单组实验,同组成员填无。
2注:实验过程记录要包含实验目的、实验原理、实验步骤,页码不够可自行添加。
2)函数auto_corr()计算二进制序列seq的自相关函数,并画出函数曲线。
在函数内调用了生成m序列的函数ms_generator(*)生成的m序列seq,然后在计算。
function seq=ms_generator(registers,connections)registers=[0 0 0 0 1];connections=[1 0 0 1 0 1];n=length(connections);L=2^(n-1)-1;seq(1)=registers(n-1);for i=2:Lsum=0;for m=1:(n-1)sum=mod(sum+registers(m)*connections(m+1),2);endfor k=(n-1):-1:2registers(k)=registers(k-1);endregisters(1)=sum;seq(i)=registers(n-1);endfunction auto_correlation=auto_corr(seq)registers=[1 0 0 0 0 ];%设置初始状态connections=[1 0 1 0 0 1];%设置反馈逻辑seq=ms_generator(registers,connections);seq=-1*(seq*2-1);%负逻辑映射len=length(seq);temp=[seq seq];for i=0:len-1auto_correlation(i+1)=seq*(temp(i+1: i+len))';endauto_correlationplot(0:len-1,auto_correlation);运行的结果如下3)函数cross_corr()计算二进制序列seq1和seq2的互相关函数并画出曲线。
matlab产生伪随机数,改变M序列幅值
1.用下式产生伪随机数:clc;clear;p=35;M=2^p;n=7;A=2^n+1;c=1;length=1000for i=2:length;x(1)=3;x(i)=mod(A*x(i-1)+c,M);endy=x/M;plot([1:length],y,'.')这种产生随机数的方法为混合同余法,当M=2^35,n=21,c=1时,相关系数接近于零。
但当n取值过大时,占用机器时间增加。
Coveyou给出的一组参数M=2^35,n=7,c=1,虽n取值不大,却能有效的减小序列的相关系数,且不占用过多的机器时间。
2.①用给出的等式产生M序列clc;clear;x(1)=0;x(2)=1;x(3)=0;x(4)=1;x(5)=0;x(6)=1;x(7)=0;x(8)=1;x(9)=0;length=500for i=10:500;x(i)=xor(x(i-4),x(i-9));endplot(x)分析:首先对x(1)到x(9)随即赋值,系数都为1,随后的变量由等式计算出来,由图可知,该序列的循环周期很长,0和1出现的概率基本相同。
②以此序列为基础产生逆序列clc;clear;x(1)=0;x(2)=1;x(3)=0;x(4)=1;x(5)=0;x(6)=1;x(7)=0;x(8)=1;x(9)=0;length=500for i=10:500;x(i)=xor(x(i-4),x(i-9));endy(i)=mod(i,2)for i=1:500z(i)=xor(x(i),y(i))endplot(z)逆M序列是M序列和方波序列复合结果,也是周期较长的随机序列,0和1出现概率相同。
③并将逆序M的幅值变为-a和+aclc;clear;x(1)=0;x(2)=1;x(3)=0;x(4)=1;x(5)=0;x(6)=1;x(7)=0;x(8)=1;x(9)=0;length=500for i=10:500;x(i)=xor(x(i-4),x(i-9));endy(i)=mod(i,2)for i=1:500z(i)=xor(x(i),y(i))enda=2for i=1:500b(i)=a*(1-2*z(i))endplot(b)分析:取a=2,幅值变为-2和+2。
m序列伪随机码产生及应用仿真matlab
序列伪随机码产生及应用仿真matlab一、概述随机序列是一种具有随机性质的数字序列,可用于信息传输、通信系统、密码学、雷达等领域。
伪随机序列是一种经过数学算法产生的序列,其具有类似与随机序列的统计特性,但实际上是确定性的。
在通信系统中,伪随机序列广泛应用于码分多址技术、扩频通信、混沌通信等领域。
本文将介绍伪随机码的产生原理,并使用matlab进行仿真实现,以加深对该技术的理解。
二、伪随机码的产生原理伪随机码的产生主要包括线性反馈移位寄存器(LFSR)、加法(XOR)运算和乘法(AND)运算等步骤。
下面以LFSR为例,介绍伪随机码的产生原理。
1. LFSR原理LFSR是一种利用移位寄存器和反馈逻辑电路构成的伪随机码产生器。
在LFSR中,存在一个移位寄存器和一个反馈逻辑电路。
移位寄存器中存储了若干比特的信息,经过时钟信号的控制完成信息的移位操作。
而反馈逻辑电路则根据寄存器中的信息产生反馈信号,从而实现伪随机序列的产生。
2. 伪随机码的产生过程(1)初始化LFSR。
将移位寄存器中的初始状态设置为一个非零的值。
(2)循环移位寄存器。
根据时钟信号的控制,移位寄存器中的信息进行移位操作。
(3)根据反馈逻辑电路的输出,生成伪随机序列。
通过反馈逻辑电路生成的反馈信号,即为伪随机序列的一部分。
三、matlab仿真实现matlab是一种功能强大的科学计算软件,具有丰富的绘图和仿真功能。
下面将使用matlab进行伪随机码的产生和仿真实现。
1. 产生伪随机码在matlab中,可以使用shiftregister函数实现LFSR的移位寄存器功能。
结合matlab的位运算功能,可以方便地实现伪随机码的产生。
以下是一个简单的matlab代码示例:```matlab定义LFSR的初始状态state = [1 0 1 0 1];定义LFSR的反馈多项式polynomial = [5 2];产生伪随机码for i = 1:10获取LFSR的输出output = state(end);计算新的状态new_state = mod(sum(state(polynomial)), 2);更新状态state = [new_state, state(1:end-1)];显示输出disp(output);end```上述代码中,通过定义LFSR的初始状态和反馈多项式,使用循环产生了10个伪随机码的输出。
Matlab随机数产生的问题
Matlab随机数产生的问题2009-02-13 08:13这2天发现这个问题讨论较多,所以就搜索了一些资料。
发现自己之前的理解有些很有问题,同时欢迎大家继续讨论。
先澄清一下几个容易弄错的地方(也不一定全对)(1)用计算机产生的是“伪随机数”。
用投色子计数的方法产生真正的随机数 , 但电脑若也这样做 , 将会占用大量内存 ; 用噪声发生器或放射性物质也可产生真正的随机数 , 但不可重复 . 而用数学方法产生最适合计算机 , 这就是周期有限 , 易重复的” 伪随机数”(2)随机数的产生需要有一个随机的种子,因为用计算机产生的随机数是通过递推的方法得来的,必须有一个初始值。
(3)用同一台电脑,且在初始值和递推方法相同的情况下,可以产生相同的随机序列(由于以前每次使用randn或者rand得到都是不同值,所以曾经误以为相同的seed无法产生相同的序列)[size=2][color=red][b]一 matlab里产生随机数的方法[/b][/color][/size] matlab里和随机数有关的函数:(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数(2) randn:产生均值为0、方差为1的高斯白噪声(3) randperm(n):产生1到n的均匀分布随机序列(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵还有很多的扩展函数,不再一一列出。
不过他们都调用的是rand或者randn函数,由此可见在matlab里rand和randn是产生随机数的关键所在。
看来只有看他们的源文件了function [varargout] = randn(varargin)%%%help 文档的内容略去%%%if nargout == 0builtin('randn', varargin{:});else[varargout{1:nargout}] = builtin('randn', varargin{:});end从这里也看不出到底是怎么产生的,就只看到builtin。
matlab伪随机数生成算法
matlab伪随机数生成算法
Matlab中的伪随机数生成算法是基于梅森旋转算法(Mersenne Twister)的。
梅森旋转算法是一种高质量的伪随机数生成器,具有较长的周期和良好的统计性质。
在Matlab中,可以使用rand函数生成伪随机数。
该函数返回一个0到1之间的均匀分布的伪随机数。
具体来说,Matlab使用了叫做梅森旋转算法的算法来生成这些伪随机数。
梅森旋转算法是一种递归算法,它使用一个624维的状态向量来生成伪随机数。
每次调用rand函数时,梅森旋转算法会根据状态向量中的值计算出一个新的伪随机数,并更新状态向量的值。
当状态向量的值用尽后,梅森旋转算法会重新计算一组新的状态向量。
由于梅森旋转算法具有较长的周期,因此在Matlab中生成的伪随机数具有较好的随机性和统计性质。
但需要注意的是,由于是伪随机数生成算法,因此生成的随机数序列是确定性的,即给定相同的种子,生成的随机数序列是相同的。
如果需要更高质量的伪随机数生成算法,可以使用Matlab中的randn函数生成服从标准正态分布的伪随机数,或使用其他高级随机数生成函数如randperm、randi等。
rand('state',sum(clock))
命令rand('state',sum(clock))命令rand('state',sum(clock))是每次产生随机数的时候,随机数生成器触发器的状态都会翻转一次。
matlab生成的随机数是伪随机数,因此可生成时间相关的随机数,种子和当前时间相关。
但这个算法有一个问题是,如果计算机太快的话,仍然会生成相同随机数。
可考虑用rand('state',sum(clock)*rand(1))补充回答:'state'那个参数是表示翻转。
sum(clock)是取种子,表示以时钟之和作为种子,这样每次取种子都很可能不同。
有时也使用100*sum(clock)rand产生的是0到1(不包括1)的随机数.matlab的rand函数生的是伪随机数,即由种子递推出来的,相同的种子,生成相同的随机数.matlab刚运行起来时,种子都为初始值,因此每次第一次执行rand得到的随机数都是相同的.1.多次运行,生成相同的随机数方法:用rand('state',S)设定种子S为35阶向量,最简单的设为0就好rand('state',0);rand(10)2. 任何生成相同的随机数方法:试着产生和时间相关的随机数,种子与当前时间有关.rand('state',sum(100*clock))即:rand('state',sum(100*clock)) ;rand(10)只要执行rand('state',sum(100*clock)) ;的当前计算机时间不现,生成的随机值就不现.也就是如果时间相同,生成的随机数还是会相同.在你计算机速度足够快的情况下,试运行一下:rand('state',sum(100*clock));A=rand(5,5);rand('state',sum(100*clock));B=rand( 5,5);A和B是相同.所以建议再增加一个随机变量,变成:rand('state',sum(100*clock)*rand(1));据说matlab 的rand 函数还存在其它的根本性的问题,似乎是非随机性问题. 没具体研究及讨论,验证过,不感多言.。
randi函数
randi函数
randi函数是MATLAB中的一种随机数生成函数,它可以帮助用户生成指定范围内的随机数,可以说是MATLAB编程中常用的一种伪随机数生成函数。
randi函数可以生成任意整数区间内的随机数,如[a,b],其中a和b都是整数,而且a<=b。
使用这个函数,用户可以指定要生成的随机数的数量,单个随机数的取值范围以及是否重复。
当用户需要生成单个随机数时,可以使用randi函数,例如:randi([1,100]),这样就可以生成1到100之间的随机整数,也可以指定不同的取值范围,如:randi([-10,10]),这样就可以生成-10到10之间的随机整数。
当用户需要生成多个随机数时,可以使用randi函数,例如:randi([1,100],m,n),其中m和n分别表示要生成的随机数的行数和列数。
这样就可以生成m行n列的随机数组,每个元素的值都在1到100之间,如果需要指定不同的取值范围,可以将范围作为参数传入函数,例如:randi([-10,10],m,n),这样就可以生成m行n列的随机数组,每个元素的值都在-10到10之间。
此外,randi函数还可以指定随机数是否重复,例如:randi([1,100],m,n,'duplicates'),这样就可以生成m行n列的随机数
组,每个元素的值都在1到100之间,而且可能存在重复的元素。
总之,randi函数是MATLAB编程中常用的一种伪随机数生成函数,它可以帮助用户生成指定范围内的随机数,可以指定要生成的随机数的数量,单个随机数的取值范围以及是否重复,是MATLAB编程中经常使用的一种随机数生成函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB伪随机数发生器.txt生活是过出来的,不是想出来的。
放得下的是曾经,放不下的是记忆。
无论我在哪里,我离你都只有一转身的距离。
均匀性较好的随机数生成
zz from /lanmuyd.asp?id=3379
随机数生成算法[1]是一类重要的算法,广泛应用于仿真技术等场合。
然而,目前的伪随机数生成器(Pseudo-random number generator, PRNG)[2]存在一个重要缺陷,即样本分布与真实分布不一致,这主要发生在以下两种情况:①抽样代价过高,样本数目较少;②空间维数较高[3]。
因此,有必要寻找一类新的随机数发生器。
准随机数发生器(Quasi-random number generator,QRNG)[4]能够生成稳定、低差异性的(low-discrepancy)样本,而与样本数目或空间维数无关[5]。
故针对蒙特卡罗积分结果不稳定的情况,提出一种基于QRNG的蒙特卡罗积分,发现比传统方法性能有所提升。
伪随机数介绍
伪随机数是由确定的算法生成的,其分布函数与相关性均能通过统计测试。
与真实随机数的差别在于,它们是由算法产生的,而不是一个真实的随机过程。
一般地,伪随机数的生成方法主要有以下3种[6]:
(1)直接法(Direct Method),根据分布函数的物理意义生成。
缺点是仅适用于某些具有特殊分布的随机数,如二项式分布、泊松分布。
(2)逆转法(Inversion Method),假设U服从[0,1]区间上的均匀分布,令X=F-1(U),则X的累计分布函数(CDF)为F。
该方法原理简单、编程方便、适用性广。
(3)接受拒绝法(Acceptance-Rejection Method):假设希望生成的随机数的概率密度函数(PDF)为f,则首先找到一个PDF为g的随机数发生器与常数c,使得f(x)≤cg(x),然后根据接收拒绝算法求解。
由于算法平均运算c次才能得到一个希望生成的随机数,因此c的取值必须尽可能小。
显然,该算法的缺点是较难确定g与c。
因此,伪随机数生成器(PRNG)一般采用逆转法,其基础是均匀分布,均匀分布PRNG 的优劣决定了整个随机数体系的优劣[7]。
下文研究均匀分布的PRNG。
伪随机数生成器的缺点
重复做N=10000次试验,每次产生S=20与S=100个随机分布的样本,同时采用Kolmogorov- Smirnov假设检验(hypothesis test)来确定样本是否满足均匀分布。
规定:
① 0假设(null hypothesis)为样本服从均匀分布;② 1假设(alternative hypothesis)为样本不服从均匀分布。
采用P值(∈[0, 1])衡量,P值越趋近于0,表示越有理由拒绝0假设,即样本不服从均匀分布;P值越趋近于1,表示越有理由接受0假设,即样本服从均匀分布。
如图1与图2所示:随着P值下降,样本也越来越不服从均匀分布。
实践中希望P值越大越好。
然而统计学的结论显示,P值一定服从均匀分布,与N、S大小无关,这表明由于随机性,总会出现某次抽样得到的样本不服从、甚至远离均匀分布。
另外,样本大小的不同,造成检验标准的不同,直观上看S=100对应的均匀分布普遍比S=20对应的更均匀。
因此,小样本情况下均匀分布PRNG的差异性尤为严重。
准随机数发生器
上节讨论了造成差异性的两个情况:小样本与高维空间。
本节讨论如何构建一类新的随机数发生器,使其具有较低的差异性。
PRNG缺陷的根源在于“随机性”与“均匀性”的矛盾。
因此,不要求新的发生器模拟真实的均匀分布,而力求任意大小的样本(尤其是小样本)都能满足低差异性。
换言之,以牺牲随机性为代价,换来均匀性的提高,称其为准随机数发生器(QRNG)。
均匀分布QRNG的优势在于,其生成的样本更趋于均匀分布。
在其基础上构建的各类分布(包括高斯分布)的QRNG,其生成的样本也更趋于服从对应的分布。
目前有3种准随机序列(Quasi-random sequency)可用来辅助生成均匀分布随机数,分别是Halton序列、Sobol序列、Latin超立方体序列。
/access/helpdesk/help/toolbox/stats/qrandstream.html matlab的方法:
qrandstream - Class: qrandstream
Construct quasi-random number stream
Syntax
q = qrandstream(type,d)
q = qrandstream(type,d,prop1,val1,prop2,val2,...)
q = qrandstream(p)
Description
q = qrandstream(type,d) constructs a d-dimensional quasi-random number stream q of the qrandstream class, of type specified by the string type. type is either 'halton' or 'sobol', and q is based on a point set from either the haltonset class or sobolset class, respectively, with default property settings.
q = qrandstream(type,d,prop1,val1,prop2,val2,...) specifies property name/value pairs for the point set on which the stream is based. Applicable properties depend on type.
q = qrandstream(p) constructs a stream based on the specified point set p. p must be a point set from either the haltonset class or sobolset class.
Examples
Construct a 3-D Halton stream, based on a point set that skips the first 1000 values and then retains every 101st point:
q = qrandstream('halton',3,'Skip',1e3,'Leap',1e2)
q =
Halton quasi-random stream in 3 dimensions
Point set properties:
Skip : 1000
Leap : 100
ScrambleMethod : none
nextIdx = q.State
nextIdx =
1
Use qrand to generate two samples of size four:
X1 = qrand(q,4)
X1 =
0.0928 0.3475 0.0051
0.6958 0.2035 0.2371
0.3013 0.8496 0.4307
0.9087 0.5629 0.6166
nextIdx = q.State
nextIdx =
5
X2 = qrand(q,4)
X2 =
0.2446 0.0238 0.8102
0.5298 0.7540 0.0438
0.3843 0.5112 0.2758
0.8335 0.2245 0.4694
nextIdx = q.State
nextIdx =
9
Use reset to reset the stream, and then generate another sample:
reset(q)
nextIdx = q.State
nextIdx =
1
X = qrand(q,4)
X =
0.0928 0.3475 0.0051
0.6958 0.2035 0.2371
0.3013 0.8496 0.4307
0.9087 0.5629 0.6166
See Also
haltonset | qrand | reset | sobolset
类别:默认分类 | | 添加到搜藏 | 分享到i贴吧 | 浏览(274) | 评论 (0) 上一篇:zz关于交叉验证
最近读者:
网友评论:
发表评论:
姓名:habby1985
内容:
插入表情
同时将此文章分享给好友
验证码:请点击后输入四位验证码,字母不区分大小写
?2011 Baidu。