真随机数和伪随机数以及伪随机数的MATLAB实现
1 真随机数
真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是不可见的。使用物理性随机数发生器生成的真随机数,可以说是完美再现了生活中的真正的“随机”,也可以称为绝对的公平,绝对的随机数。
2 伪随机数
实际上,绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数,“伪”代表有规律。
只不过这个规律周期比较长,但还是可以预测的。主要原因就是伪随机数是计算机使用算法模拟出来的,这个过程并不涉及到物理过程,所以自然不可能具有真随机数的特性。
3 (伪)随机数的产生
(伪)随机数是由“随机种子”产生的,随机种子是用来产生随机数的一个数,在计算机中,这样的一个“随机种子”是一个无符号整形数。
随机种子来自系统时钟,确切地说,是来自计算机主板上的定时/计数器在内存中的记数值。
1.计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。
2.只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。
4 (伪)随机数发生函数
4.1 rand和 randn的区别
MATLAB中有两个经常会用到的(伪)随机数发生(器)函数:rand与randn。rand函数——生成均匀分布伪随机数。randn函数——生成正态分布伪随机数。
a、rand 生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以
是’single’。
b、randn 生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样
seed、state、twister是产生随机数的不同算法。seed表示采用v4版本的随机数产生器,state是v5版本的随机数产生器,最后的twister用的则是Mersenne Twister随机数产生器。
4.2 randn命令中randn(‘state‘)和randn(‘seed‘)
例如,randn(‘seed’,S)和randn(‘state’,S),S是表示初始状态的整数。
>> randn('seed',100)%seed表示采用v4版本的随机数产生器,100表明选定了一个初状态
>> x=randn(1,6)%再定义随机数列x=randn(1,6),1行6列,x的值会确定下来x =-0.0572 -0.5738 -0.2066 0.3955 0.6380 -0.3452>> x=randn(1,6)x =-0.0410 -0.4511 0.3560 0.8854 -0.6551 -1.5812>> x=randn(1,6)x =-1.9002 -0.6726 -0.9943 0.1582 0.6838 -0.5364>> randn('seed',100)
>> x=randn(1,6)x =-0.0572 -0.5738 -0.2066 0.3955 0.6380 -0.3452>> x=randn(1,6)x =-0.0410 -0.4511 0.3560 0.8854 -0.6551 -1.5812
可以看到,相同的种子,产生完全一样的随机数,设定初始状态的好处是,只需要保存那时的初始状态再运行一遍程序你就可以重现之前的计算过程和结果。
缺点是虽然程序使用了随机数,但由于(每次启动后)初始状态一样,实际运行出来却是相同的重复过程,你需要人工设定一个保证随机性的初始状态。
randn(‘state’,S)亦如此
>> randn('state',100)%seed表示采用v4版本的随机数产生器,100表明选定了一个初状态
>> x=randn(1,6)%再定义随机数列x=randn(1,6),1行6列,x的值会确定下来x =0.9085 -2.2207 -0.2391 0.0687 -2.0202 -0.3641>> x=randn(1,6)x =-0.0813 -1.9797 0.7882 0.7366 0.9553 1.9295>> x=randn(1,6)x =-0.7453 -0.8984 -3.2625 -0.0300 0.6134 1.0446>> randn('state',100)
>> x=randn(1,6)x =0.9085 -2.2207 -0.2391 0.0687 -2.0202 -0.3641>> x=randn(1,6)x =-0.0813 -1.9797 0.7882 0.7366 0.9553 1.9295
也就是说只要’S’是一定的,伪随机数是一样的。
一般情况下,伪随机数已经够用,但是想通过程序获得严格并且严肃的统计结果,一个真正的随机数生成器还是必要的。又比如,如果你是在设计一个大规模的抽奖程序的话,使用伪随机数肯定会被人质疑。所以大家玩各种抽奖游戏的时候,大可不必担心商家会亏钱!
真随机数和伪随机数以及伪随机数的MATLAB实现相关推荐
- 解密随机数生成器(1)——真随机数生成器
解密随机数生成器(1)--真随机数生成器 从小就一直很好奇,MP3播放器的随机播放功能是如何实现的,今天读到一篇关于随机数的文章,又勾起了我的那时好奇心,索性上下求索,了解了随机数背后的很多知识,顿觉 ...
- php真随机数,php 的伪随机数与真随机数实例详解
这篇文章主要介绍了PHP的伪随机数与真随机数详解,本文首先讲解了真随机数和伪随机数的相关概念,并给出了比用mt_rand()函数产生更好的伪随机数的一段例子代码,需要的朋友可以参考下 首先需要声明的是 ...
- 随机数芯片,从硬件上能产生真随机数,非伪随机数
最近做一个游戏的项目,需要用到随机数来闯关.我们讲的随机数其实暗指伪随机数.不少朋友可能想到C语言的rand(),可惜这个函数产生的随机数随机性非常差,而且速度很慢,相信几乎不能胜任一般的应用.资深的 ...
- 随机数:真随机数和伪随机数
说到随机这个词,相信各位肯定都深有体会了.生活中有太多的不确定因素从各方各面影响着我们,但也正是因为这样我们的人生更加多彩,具有了更多的可能性. 可以说,随机是个非常有魅力的东西. 你在生活中可能因为 ...
- 量子计算机真随机数,量子真随机数发生器研究取得进展
量子真随机数发生器研究取得进展 超高速真随机数发生器简化设计方案(上)与后处理方法(下) 信息科学技术学院郭弘教授课题组与物理学院张建玮副教授课题组开展合作,在用光学随机源设计研制量子真随机数发生器的 ...
- 从Linux内核中获取真随机数【转】
转自:http://www.cnblogs.com/bigship/archive/2010/04/04/1704228.html 内核随机数产生器 Linux内核实现了一个随机数产生器,从理论上说这 ...
- C#产生随机数之一 生成真随机数
Random 成员 名称 ● 说明 Equals ● 确定指定的 Object 是否等于当前的 Object.(继承自 Object.) Finalize ● 允许Object 在"垃圾回收 ...
- 启科 QuSaaS 真随机数解决方案与 Amazon Braket 结合实践
作者:1.丘秉宜,2.邵伟,3.黄文,4.郭梦杰 1.亚马逊云科技 HERO:2.开发者生态负责人:3.DEVOPS 工程师:4.资深研发工程师 1.概述 随机性(Randomness)是偶然性的一种 ...
- 启科QuSaaS真随机数解决方案与Amazon Braket结合实践
1.概述 随机性(Randomness)是偶然性的一种形式,具有某一概率的事件集合中的各个事件所表现出来的不确定性.对于一个随机事件可以探讨其可能出现的概率,反映该事件发生的可能性的大小.随机性在自然 ...
最新文章
- [转载] 一致性哈希
- vue项目统一响应_Vue响应式原理及总结
- ACM常用数列(斐波那契数列、卡特兰数、贝尔数、斯特灵数)
- 如何检查计算机账号克隆
- 双指针(下标)的应用
- SQL函数大全(转)
- ubuntu18.04-安装-wechat
- 安装Oracle 11g RAC R2 之Linux DNS 配置
- com.autonavi.AMapLocationThread (13): Exception: threading violation: expected the main thread-iOS
- mysql高级查询之性能分析explain和日志查看
- 达人评测 i7 11390h和i5 11320h选哪个好
- 37岁程序员裸辞,120天被497家公司拒绝,网友:为自己的冲动买单
- 核桃编程学员对话诺贝尔奖得主 用童心预见未来 探讨人工智能发展
- 滴滴云服务器搭建网站的一键脚本,一键搭建流控脚本 一键搭建云免流服务器...
- Column 'parent_id' specified twice问题解决--insertable = false, updatable = false的使用
- unity android解析包失败,打包APK失败。求解释
- 浅谈微信公众号怎么涨粉丝
- 信息化和软件服务业司参加工业互联网平台与软件化发展高峰论坛
- 电脑术语之五主板术语
- 顺磁性和抗磁性物质的一个重要的特征