精华内容
下载资源
问答
  • 随机数组合发生器-matlab实现

    千次阅读 2020-05-18 16:04:26
    单个的随机数发生器在周期性等方面存在缺陷,组合发生器是将两个或者多个独立的随机数发生器以某种方式组合起来,使得新组合的随机数...用第二个线性同余发生器M2生成一个随机整数j,满足1 <= j <= k; 令xn = t

    单个的随机数发生器在周期性等方面存在缺陷,组合发生器是将两个或者多个独立的随机数发生器以某种方式组合起来,使得新组合的随机数发生器具有更长的周期和良好的统计性质。

    在组合发生器中比较著名的是M.D.Maclaren和G.Marsaglia于1965年提出的组合同余法,生成规则如下:

    1. 采用第一个线性同余发生器M1生成k个随机数,把k个数按序依次存放在某一个向量T中,T=(t1,t2,…,tk),令n=1;
    2. 用第二个线性同余发生器M2生成一个随机整数j,满足1 <= j <= k;
    3. 令xn = tj,用M1生成一个新的随机数y替代tj,即令tj = y,置n = n+1;
    4. 重复2-3步,得到随机数序列{xn},即为组合发生器生成的序列。若M1的模为m,令 un = xn/m,则{un}即为由该组合发生器生成的均匀随机数序列。

    当然,根据此生成规则以及常用的随机数发生器可以生成多个组合发生器,如平方取中发生器与其自身的组合、与乘积取中、线性同余、常数乘子、斐波那契等随机数发生器的组合(单个随机数发生器的matlab代码可参考文章:五种常用的随机数发生器-matlab实现)。下面用matlab实现其中的一种组合。

    注:下面直接在程序里进行了参数调用,也可将整个过程封装成函数然后调用。

    % 组合发生器生成随机数:
    % 为简便起见,循环之前首先生成了满足规则2和规则3的两组向量,
    % 在循环体中从两组向量中随机抽取满足条件的整数j和y,只是其中一种解决方式,仅做参考
    clc
    close all
    
    % 第一步,第一个随机数发生器生成100个随机数,并按序放至向量T中
    % 生成随机向量Y,从Y中随机取出一个y来替代tj
    [T,u1] = linear_mod_random(73, 7, 213, 5, 100);    % 参数可更改
    Y = linear_mod_random(53, 2, 157, 6, 100);         % 参数可更改
    
    # 将三个随机数序列放在一起可视化
    subplot(3,2,1);
    plot(T(1:end), '*-');
    title('第一个随机数发生器');
    hold off;
    
    subplot(3,2,2);
    hist(u1(2:end));
    title('随机数直方图分布');
    hold off;
    
    % 第二步,第二个随机数发生器生成随机的整数j,满足1<=j<=100
    % 生成随机向量J,在循环中从向量J中随机抽取一个满足条件的j
    [J,u2] = linear_mod_random(47, 2, 157, 6, 100);      % 参数可更改
    
    subplot(3,2,3);
    plot(J(1:end), '*-');
    title('第二个随机数发生器');
    hold off;
    
    subplot(3,2,4);
    hist(u2(2:end));
    title('随机数直方图分布');
    hold off;
    
    J1 = [];
    u21 = [];
    for i = 1 : 100
        % 第二步,第二个随机数发生器生成随机的整数j,满足1<=j<=100
        j = rem(J(int16(rand * (length(J) - 1) + 1)),100)+1;
        % 第三步,第一个随机数发生器生成一个新的随机数y以替代tj
        y = Y(int16(rand * (length(Y) - 1) + 1));
        % 第三步,将t[j]赋值给x[i],并用y代替t[j]
        x(i) = T(j);
        T(j) = y;
    end
    
    u = x / 213;   # 此处求u用的是第一个随机数发生器的m值
    
    subplot(3,2,5);
    plot(x(1:end), '*-');
    title('组合随机数发生器');
    hold off;
    
    subplot(3,2,6);
    hist(u(2:end));
    title('随机数直方图分布');
    hold off;
    
    % 定义linear_mod_random函数
    function [x,u] = linear_mod_random(a, c, m, x0, iterMax)
        x = [];
        u = [];
        x(1) = x0;
        u(1) = x(1) / m;
        for i = 2 : iterMax
            x(i) = a * x(i-1) + c;
            x(i) = mod(x(i), m);
            u(i) = x(i) / m;
        end
    end
    

    需要注意的是,组合发生器理论上能够提高随机数的性能,但也会受到组合规则、组合所用发生器自身等因素的影响,性能是否提高需要利用随机数序列检验方法进行检验。

    展开全文
  • 五种常用的随机数发生器-matlab实现

    千次阅读 2020-05-17 15:22:25
    五种常用的随机数发生器-matlab实现 五种常用的随机数发生器包括平方取中发生器、乘积取中发生器、线性同余发生器、常数乘子发生器和斐波那契发生器。 平方取中发生器 clc clear all close all % 调用函数---参数...

    五种常用的随机数发生器-matlab实现

    五种常用的随机数发生器包括平方取中发生器、乘积取中发生器、线性同余发生器、常数乘子发生器和斐波那契发生器。原理可问度娘,这里不再介绍,只总结代码实现。

    1. 平方取中发生器
    clc
    clear all
    close all
    
    % 调用函数---参数可修改
    [x0,u0] = Square_mid_rand(156, 2, 20);
    
    % 定义函数
    function [x u] = Square_mid_rand(x0, k, maxIter)  
        x = [];   % 初始化空矩阵
        u = [];
        x(1) = x0;   % 赋值操作,即: x0 放到向量x的第一个分量中
        u(1) = x(1) / 10^(2*k);
        for i = 2 : maxIter   % 循环
            x(i) = rem(floor(x(i-1)^2 / 10^k), 10^(2*k));   % 随机数迭代发生器
            u(i) = x(i) / 10^(2*k);
        end
        
        % 绘制图像
        subplot(1,2,1);  
        hold on;   % 保持当前状态。
        plot(u(3:end), '*-');  % 数据为u的第3个分量开始到最后一个分量,*标记关键点
        sTitle = sprintf('平方取中随机数发生器 (x0=%d, k=%d)', x0, k);  % 格式化输出字符串
        title(sTitle); 
        hold off;
        
        subplot(1,2,2); 
        hold on;
        hist(u(3:end));
        title('随机数直方图分布');
        hold off;
    end
    
    1. 乘积取中发生器
    clc
    clear all
    close all
    
    % 调用函数---参数可修改
    [x0, u0] = multiply_mid_rand(5167, 3729, 2, 20)
    % 定义函数       
    function [x u] = multiply_mid_rand(x0, x1, k, maxIter)
        x = [];
        u = [];
        x(1) = x0; x(2) = x1;
        u(1) = x(1) / 10^(2*k);
        for i = 3 : maxIter
            x(i) = rem(floor(x(i-1) * x(i-2) / 10^k), 10^(2*k));
            u(i) = x(i) / 10^(2*k);
        end
        
        hold on;
        subplot(1,2,1);
        plot(u(3:end), '*-');
        sTitle = sprintf('乘积取中随机数发生器 (x0=%d, x1=%d, k=%d)', x0, x1, k);
        title(sTitle);
        
        subplot(1,2,2);
        hist(u(3:end));
        title('随机数直方图分布');
        hold off;
    end
    

    3、线性同余发生器

    clc
    clear all
    close all
    
    % 调用函数---参数可修改
    [x0,u0] = linear_mod_random(5, 5, 9, 5, 20)
    
    % 定义函数      
    function [x,u] = linear_mod_random(a, c, m, x0, iterMax)
        x = [];
        u = [];
        x(1) = x0;
        u(1) = x(1) / m;
        for i = 2 : iterMax
            x(i) = a * x(i-1) + c;
            x(i) = mod(x(i), m);
            u(i) = x(i) / m;
        end
        
        hold on;
        subplot(1,2,1);
        plot(x(2:end), '*-');
        sTitle = sprintf('线性同余随机数发生器 (a=%d, c=%d, m=%d, x0=%d)', a, c, m, x0);
        title(sTitle);    
        
        subplot(1,2,2);
        hist(u(2:end));
        title('随机数直方图分布');
        hold off;
    end
    

    4、常数乘子发生器

    clc
    clear all
    close all
    
    % 调用函数---参数可修改
    [x0,u0] = con_mid_rand(6983, 2687, 2, 20);
    
    % 定义函数
    function [x u] = con_mid_rand(x0, M, k, maxIter)
        x = [];
        u = [];
        x(1) = x0; 
        u(1) = x(1) / 10^(2*k);
        for i = 2 : maxIter
            x(i) = rem(floor(x(i-1) * M / 10^k), 10^(2*k));
            u(i) = x(i) / 10^(2*k);
        end
        
        hold on;
        subplot(1,2,1);
        plot(u(2:end), 'r*-');
        Title = sprintf('常数乘子随机数发生器 (x0=%d, M=%d, k=%d)', x0, M, k);
        title(Title);
        
        subplot(1,2,2);
        hist(u(2:end));
        title('随机数直方图分布');
        hold off;
    end
    

    5、斐波那契发生器

    clc
    clear all
    close all
    
    % 调用函数---参数可修改
    [x0,u0] = fib_rand(9, 20);
    
    % 定义函数
    function [x u] = fib_rand(m, MaxIter)
        x = []; modX = [];
        u = [];
        x(1) = 1; x(2) = 1; 
        for i = 3 : MaxIter
            x(i) = x(i-1) + x(i-2);
            modX(i) = rem(x(i), m);
            u(i) = modX(i) / m;
        end
        
        hold on;
        subplot(1,2,1);
        plot(modX(3:end), 'r*-');
        sTitle = sprintf('斐波那契随机数发生器 (m=%d)',m);
        title(sTitle);
        
        subplot(1,2,2);
        hist(u(3:end));
        title('随机数直方图分布');
        hold off;
    end
    

    以上用matlab简单实现的五种随机数发生器,接下来有时间会补充组合发生器以及所生成的随机数序列的性能检验。

    展开全文
  • 总共有五种随机数发生器,包括平方取中、乘积取中等
  • MulGETS 是一种新的基于 Matlab随机天气发生器,用于生成多站点降水和温度。 它是单站点天气生成器 WeaGETS ( ...
  • matlab平方取中法、线性同余法、组合发生器生成三种伪随机数,并进行均匀性检验
  • matlab开发-三角分布随机变量发生器。该函数生成一个三角形分布连续随机变量的向量。
  • WeaGETS是一个基于Matlab的多功能随机每日天气生成器(WeaGETS),用于产生无限长的每日降水量,最高和最低温度(Tmax... 最后,还包括一种光谱校正方法,以校正众所周知的对与天气发生器相关的月度和年际变化的低估。
  • matlab随机发生器(Matlab pseudo random number generator)matlab随机发生器(Matlab pseudo random number generator)Generation of random numbers with good uniformityZZ, from, /lanmuyd.asp, id=3379?...

    matlab伪随机数发生器(Matlab pseudo random number generator)

    matlab伪随机数发生器(Matlab pseudo random number generator)

    Generation of random numbers with good uniformity

    ZZ, from, /lanmuyd.asp, id=3379?

    Random number generation algorithm [1] is an important algorithm, widely used in simulation technology and other occasions. However, the pseudo random number generator (Pseudo-random number generator, PRNG [2]) is a major defect, namely the sample distribution and the true distribution is not the same, which occurred mainly in the following two situations: the sampling cost is too high, the number of samples is less; the higher spatial dimension [3].

    Therefore, it is necessary to find a new class of random number generators. Quasi random number generators (Quasi-random, number, generator, QRNG) [4] can generate stable, low contrast (low-discrepancy) samples, independent of the number of samples or the dimension of space, [5]. In view of the instability of Monte Carlo integral results, a integral based on QRNG is proposed, and it is found that the performance is better than that of the traditional methods.

    Introduction to pseudo random numbers

    The pseudo random number is generated by a given algorithm, and its distribution function and correlation can be statistically tested. The difference between real and random numbers is that they are generated by algorithms rather than a real random process. Generally speaking, the methods of generating pseudo random numbers are mainly the following 3 kinds of [6]:

    (1) the direct method (Direct, Method) is generated according to the physical meaning of the distribution function. The drawback is that it applies only to certain random numbers with special distributions, such as binomial distribution and Poisson distribution.

    (2) reverse method (Inversion, Method), assuming that U obeys the uniform distribution of [0 and 1] interval, and makes X=F-1 (U), then the cumulative distribution function (CDF) of X is F. The method is simple in principle, convenient in programming and wide in applicability.

    展开全文
  • matlab开发-随机单位矢量发生器。广义随机单位向量n=1各向同性
  • 基于简化Lorenz系统,提出混沌伪随机序列发生器的一种设计方法。根据IEEE-754浮点运算标准,按照模块化设计理念,设计混沌方程所需的浮点运算模块,并在FPGA(Field Programmable Gate Array)上实现了简化Lorenz混沌系统...
  • MATLAB随机发生器

    2021-04-18 10:05:14
    MATLAB随机发生器.txt 生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。均匀性较好的随机数生成zz from http://www.ahcit.com/lanmuyd.asp?id=3379...

    MATLAB 伪随机数发生器.txt 生活是过出来的,不是想出来的。放得下的是曾经,放不下的是记忆。无论我在哪里,我离你都只有一转身的距离。

    均匀性较好的随机数生成

    zz from http://www.ahcit.com/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 超立方体序列。

    http://www.mathworks.com/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

    展开全文
  • 本原多项式:X7+X6+1clc;clear all;close all;%---PRBS 7-----%num=127;%输出序列需要输出的个数registers=ones(1,7);output=zeros(1,num);% 设置寄存器初始值% registers(1)=1;% registers(2)=1;...
  • 随机数生成-移位寄存器方法
  • 从离散分布生成随机样本。 使用 Gumbel 分布的属性来避免速度循环。 输入: 问题 [QN] 如果 type=='prob',则prob(:,n) 是第 n 个样本的概率向量,即概率(样本(n)== q)=概率(q,n)/总和(概率(:,n)) ...
  • 该函数生成帕累托分布的 iid 随机变量。
  • 2D random paths generator integrating leg's contraintsGenerates random 2D-paths between start and finish nodes according to densities distribution given by matrix C with leg's contrainsts defined by t...
  • matlab下的信号发生器

    2013-05-28 22:53:02
    这是matlab下的一个信号发生器,共发生三种信号,同时也加入了随机噪声
  • Matlab 跳频信号发生器

    2021-04-18 07:36:14
    摘要:随着扩频通信技术在民用通信中的深入应用,以及在卫星通信、深空通信、武器制导、GPS全球定位系统和跳频通信等民用和国防军事通信的强烈需求下,扩频通信技术已...本课题利用Matlab仿真平台对跳频信号发生器进...
  • MATLAB信号发生器仿真

    2021-08-25 12:00:39
    [摘要]本论文以课题“信号发生器MATLAB仿真”为背景展开,介绍了MATLAB仿真技术的发展和信号发生器的现状,结合线性调制系统的应用背景设计了一种结构简便、性能优良的线性调制信号发生器,全面的实现信号发生器的...
  • 基于MATLAB的函数信号发生器目的函数信号发生器是基于软硬件实现的一种波形发生仪器。在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号可由函数信号发生器模拟产生,因此它在...
  • 基于该变结构混沌系统设计了一种伪随机序列发生器,采用NIST标准和STS-2.0b测试套件对其产生的伪随机序列进行了统计性能测试,测试结果表明该伪随机序列发生器具有良好的随机性,可应用于计算机、通信、信息加密...
  • 基于MATLAB的伪随机序列发生器的设计说明.doc
  • 摘 要:数字信号发生器是基于软硬件实现的一种波形发生仪器。在工工程实践中需要检测和分析的各种复杂信号均可分解成各简单信号之和,而这些简单信号皆可由数字信号发生器模拟产生,因此它在工程分析和实验教学有着...
  • 生成伯努利随机变量的函数。 它以成功概率 P 返回 1,以不成功概率 1-P 返回 0
  • 介绍了通过计算机的声卡来实现虚拟信号发生器的基本原理以及Matlab的数据采集工具箱中用于模拟信号输出的主要函数和命令,并以三角波信号发生器为例,详细介绍了该信号发生器的具体实现方法,这对获得难以用常规仪.....
  • 基于Matlab的信号发生器GUI设计

    千次阅读 2020-11-30 18:01:06
    一、应用背景 传统的台式函数信号发生器具有体积庞大,接口不灵活,波形固定,价格昂贵等缺点,针对此现状,本次根据老师布置的作业完成一个简单的数字信号发生器,可以产生不同幅值,频率的白噪声、正弦波、锯齿波...
  • MATLAB m序列发生器

    2019-06-04 19:36:41
    m序列是伪随机编码信号 此函数用来生成m序列 coef为反馈系数向量
  • 目的是展示获取随机位的主要思想,即每个可观察模块中出现的概率为 50%-50%。 随机性的错觉提供了这样的观察。 提供了用于大整数的 bin2dec 和 dec2bin 转换的实用程序。 主要执行参考用法:usage_RNG.m 显示位分布...
  • rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n的随机数矩阵 (现成的函数)另外:Matlab随机数生成函数betarnd 贝塔分布的随机数生成binornd 二项分布的随机数生成chi2rnd 卡方分布的随机数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,651
精华内容 1,860
关键字:

matlab随机发生器

matlab 订阅