Matlab 中伪随机数的生成以及可复现的不放回等概率随机抽样
2017-03-04 15:40
495 查看
Matlab 中伪随机数的生成以及可复现的不放回等概率随机抽样
在一些统计分析和优化实验中,需要用到随机数,可是我们又无法得到真正的随机数。平时使用的都是伪随机数,是拿软件模拟的随机数。比如,系统时间具有随机性,常常被用作位随机数种子。
利用matlab可以很方便的生成伪随机数,用来做统计抽样等各种实验。
比如,你要在1-100的整数中随机抽取42个不重复的样本。显然,这是一个典型的不放回抽样。如果单纯生成42个随机数,很容易,一行代码就可以解决。然而,大多时候,为了让我的随机抽样实验更加经得起别人的验证,我们需要想办法,让这个抽样可以复现,也就是说,让别人直到,我们的随机抽样不是靠心情人工瞎选的。
用matlab解决这个问题的方法有很多种,这里介绍我认为最方便的方法:
rng('default');%先将随机数生成器设置为默认值 rng(6);%设置伪随机数种子为6 randsample(100,42);%进行随机抽样 结果如下: 1 至 23 列 95 82 4 21 73 84 48 5 91 27 71 77 79 64 57 53 74 93 30 81 39 33 52 24 至 42 列 96 58 2 55 9 86 38 100 46 49 40 29 67 76 43 18 8 11 45
注:以后要用matlab实现这种随机抽样的时候,将种子定为6,都会得到这个结果。
但是,在其他软件下。不一定会是这个结果,因为不同软件生成伪随机数的原理可能不同。
另外,如何根据既定的随机数结果,反推得到开始的种子。这个问题原则上是可以解决的,以后有时间尝试一下。
另外,还想着得到一个具有特定规律的随机序列(此处略去目的),思路自然就是暴力搜索啊。让伪随机种子从1开始逐步递增,直到生成的随机序列复合要求的时候就停下来。然后,如愿得到了想要的结果,巧的是,伪随机种子是1的时候就得到了想要的结果。 代码如下:
k = 1; thesize = 42; thecase = 0; thesample = {}; theindex = {}; thesort = {}; firsthalf=[]; lasthalf =[]; while (1) rng('default');%先将随机数生成器设置为默认值 rng(k);%设置伪随机数种子为6 thesample{k} = randsample(100,42)%进行随机抽样 [thesort{k} theindex{k}] = sort(thesample{k}); firsthalf = theindex{k}(1:thesize/2); lasthalf = theindex{k}(thesize/2+1:end); %thecase=1: if length(find(firsthalf==1))*length(find(firsthalf==3))*length(find(firsthalf==5))*length(find(lasthalf==2))*... length(find(lasthalf==4)) thecase = 1; end if length(find(firsthalf==2))&length(find(firsthalf==4))&length(find(lastthalf==1))&... length(find(lasthalf==3))&length(find(lasthalf==5)) thecase = 2; end if thecase disp('the appreciate result has been found!'); break; end k=k+1; end
相关文章推荐
- Matlab中以指定的概率生成伪随机数
- MATLAB生成正态样本以及正态矩阵、从文件读入矩阵
- matlab中fspecial中生成高斯模板的解释以及c语言实现
- MATLAB生成多张figure以及自动保存
- 如何用matlab以一定概率生成随机数
- MATLAB 生成随机整数 的各种方法以及实例
- opencv 创建和读取xml文件以及matlab生成xml
- matlab的RandStream和伪随机数的重复生成
- MATLAB生成正态样本以及正态矩阵、从文件读入矩阵
- matlab中fspecial中生成高斯模板的解释以及c语言实现
- matlab中fspecial中生成高斯模板的解释以及c语言实现
- Matlab求解高斯分布的概率以及概率反解-使用erf相关函数
- matlab中fspecial中生成高斯模板的解释以及c语言实现
- MATLAB 生成随机整数 的各种方法以及实例
- 【MachineLearing】判别模型与生成模型以及相关概率统计知识
- 【matlab】以一定的概率生成随机数
- C++ Builder 实现动态生成窗口、控件,以及处理控件事件
- XML形式的配置文件解析框架以及自动代码生成(一)
- 今晚看朋友用Hibernate和spring,struct,ibatis以及用MyEclipse插件生成代码
- 学习.NET (4) Inside Assembly -研究Assembly的结构,强命名Assembly的生成以及Delayed signing的过程