一,matlab中生成随机数主要有三个函数:rand, randn,randi

1,rand  生成均匀分布的伪随机数。分布在(0~1)之间

主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数

rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'

rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数

2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)

主要语法:和上面一样

3, randi 生成均匀分布的伪随机整数

主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数

randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵

r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵

二,关于随机种子,伪随机数的重复生成

正常情况下每次调用相同指令例如rand生成的伪随机数是不同的,

例如:

rand(1,3)

rand(1,3)

matlab的输出为:

ans =
  0.139043482536049  0.734007633362635  0.194791464843949
ans =
  0.602204766324215  0.937923745019422  0.149285414707192

如何使两个语句生成的随机数相等呢?

Matlab帮助中的下面章节有所叙述:

Managing theDefault Stream

管理默认(缺省)流

rand, randn, and randidraw random numbers from anunderlying random number stream, called the default stream.The @RandStream class allows you to get a handle to the default streamand control random number generation.

rand,randn,和randi 从一个基础的随机数流中得到随机数,叫做默认流。你可以通过@RandStream 类得到默认流的句柄从而控制随机数的生成。

Get a handle to the default stream asfollows:

以下为得到默认流句柄的代码:

defaultStream=RandStream.getDefaultStream defaultStream = mt19937ar random stream (current default) Seed: 0 RandnAlg: Ziggurat
Return the properties of the stream object with the getmethod: 用get方法返回流对象属性:
get(defaultStream) Type: 'mt19937ar' NumStreams: 1 StreamIndex: 1 Substream: 1 Seed: 0 State: [625x1 uint32] RandnAlg: 'Ziggurat' Antithetic: 0 FullPrecision: 1
The State property is the internal state of the generator. You can save the State ofdefaultStream . state属性是发生器的内部状态,你可以保存默认流的状态:
myState=defaultStream.State;
Using myState , you can restore the state of defaultStream and reproduce previous results. 利用myState你可以恢复默认流状态重新生成前面的结果:
myState=defaultStream.State; A=rand(1,100); defaultStream.State=myState; B=rand(1,100); isequal(A,B) ans = 1
你也可以直接使用@RandStream 类的reset静态方法重置种子状态来获取相同的随机生成序列,下面是示例代码:

stream =RandStream.getDefaultStream;%获取默认的随机种子(暂时这么叫,帮助有详细解释)
reset(stream);%重置
rand(stream,1,3)
reset(stream);%重置
rand(stream,1,3)

matlab的输出为:

ans =
  0.814723686393179  0.905791937075619  0.126986816293506
ans =
  0.814723686393179  0.905791937075619  0.126986816293506

可以看出生成的随机码是相等的,这样可以用于重复实验上来

-------以上为转载部份-------------转载处:新浪博客--无名指

以上的说明表RandStream可以完成相同随机数的生成,这对于结果的可重复性是至关重要的。

下面从另一个方面,说明RandStream的应用场景,例如:

第一次在matlab运行程序的过程中我们生成了100个rand的随机数,然后退出了matlab.

第二次我们又在matlab中运行这个程序,那么,这次生成的100个rand随机数,实际上与第一次中的100个rand随机数是一样的,因此,这两次程序的运行结果将会一样,保证了结果的可重复性。

但是,往往,有这样的应用,在机器学习和模式识别中,我们要检验一个算法的稳健性,往往要在同个数据集上,运行多次,然后取平均值表明为这个算法的在这个数据集上的性能。假设运行100次,当要完成这100次所花费的时间很长时,自然我们想到,在n 个matlab中分开运行这100次,每个运行100/n次,为了得到每个运行结果的不一样,就需要运用RandStream

[s1,...,sn] = RandStream.create('mrg32k3a','NumStreams',n);  %得到新的stream
s = RandStream.getDefaultStream;                           %保存原有的默认streamRandStream.setDefaultStream(si);        %重置默认stream
%%%%%%run procedure%%%%%
RandStream.setDefaultStream(s);        %还原默认stream

这样就保证了每个matlab运行的结果不一样。

Matlab中的RandStream相关推荐

  1. matlab fromstream,Matlab中的RandStream的应用场景 -转

    1,rand 生成均匀分布的伪随机数.分布在(0~1)之间 主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可 ...

  2. MATLAB中rand,randi,randn函数,及rand('state',0)和rand('seed',0)产生随机种子详解

    一.问题来源: 在学习matlab中看到书上有许多关于生成随机数的应用,y书上一开始会写一个rand('state',0),注释是为了方便验证,一开始并不是很理解,最近搜索网上文章等深入理解了下关于M ...

  3. matlab中dmodce函数使用报错,matlab中randi函数

    ④矩形脉冲信号 矩形脉冲信号在 MATLAB 中用 rectpuls 函数表示,其调用形式为 ft...(1,n); >>xn3=randi(n,1,n); >>subplot ...

  4. Matlab中的随即置乱函数randperm和randsample函数用法对比

    Matlab中的randperm和randsample函数用法对比 转载:http://blog.sina.com.cn/s/blog_a4034b280101k4gg.html 构建替代数据的时候, ...

  5. Matlab中的randperm和randsample函数用法总结

    构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值.方差.分布)一致的随机数据.具体到Matlab中,此思路的实现会涉及到两个命 ...

  6. tm matlab,[转载]关于matlab中textread

    今天打算跑下程序,突然发现,真的很烂,不会读入数据,简单的Iris.txt一上午都没读进去,在此对matlab中的textread函数做下总结,textscan函数待续. 笔者在此基础上进行运行,修改 ...

  7. matlab中normfit,MATLAB中如何得到一组统计数据的分布特征

    MATLAB中如何得到一组统计数据的分布特征 我想通过MATLAB知道一组统计数据的分布特征,如属于哪种分布,均值方差等,请问如何实现?谢谢! function f=p_judge(A,alpha) ...

  8. Matlab中bwmorph函数的使用

    Matlab中bwmorph函数的使用 Matlab中提供了一个基于形态学的处理函数,即以膨胀.腐蚀等操作为基础,其语法格式如下: bw2=bwmorph(bw1,operation,n); 其中bw ...

  9. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

最新文章

  1. 2020年github文件高速下载方法
  2. 解决webpack打包bootstrap报字体不能解析问题
  3. linux下使用pidcat找bug
  4. java开发 职业技能_java编程开发程序员需要具备哪些职业技能
  5. selenium:断言
  6. 使用负边距创建自适应宽度的流体布局
  7. 连接两个std :: vector
  8. ApiCloud数据Url请求
  9. 中国止血分析仪行业市场供需与战略研究报告
  10. 电脑文件删除不掉什么原因?程序显示被占用清理不掉如何操作?
  11. 机场安检 matlab实现,机场安检过程改进的方案.doc
  12. 四川师范大学计算机系黄宇,黄宇-经济信息工程学院
  13. 计算机网络实验--Cisco Packet Tracer 实验
  14. ubuntu16.04 百度网盘加速下载文件
  15. 智能车辆路径跟踪:carsim和simulink联合仿真,基于车速的变权重多点预瞄驾驶员模型个例
  16. 百度Al在线语音合成(简单版)
  17. JS - Array - 在数组的指定下标添加或替换元素 。 也可删除指定下标的元素
  18. Java经典实验_猴子的经典实验(转载)
  19. 品酒论三国之一(创业时代的第二堂必修课:自助者天助)
  20. 无时不在断流的小米10手机的共享热点

热门文章

  1. springboot 怎么 回滚事务
  2. iOS开发常见错误代码对照表---真机调试常见错误及解决方案
  3. linux自动挂载fcoe存储,刀箱服务器上部署集群模式CloudOS挂载FCoE存储方法
  4. python 验证码去除干扰线,python 对验证码图片进行降噪处理
  5. 软考:计算机技术与软件专业技术资格(水平)考试
  6. “Tranfer-Encodeing:chunked“和“Content-Length“这两个字段是互斥的理解
  7. (附源码)基于Spring Boot的ERP仓储管理信息系统设计与实现 毕业设计150958
  8. 2022年最新版的运维面试题【从基础到精通】
  9. HNUOJ_10069
  10. pdf转图片(png高清)