作者popo14777 (草草)
看板MATLAB
标题[问题]固定乱数与if结构
时间Wed Mar 2 23:00:18 2016
小弟想要把avg值给固定住
以下是我的程式码
for j=1:1000
for i=1:1000
data=normrnd(mu,sigma,m,n);%随机产生常态机率的值(-3~3间)
data_total=[data_total; data];
if (data>3) || (data<-3)%若在-3与3之外,就停止回圈
break
end
end
d=[d;i];
end
avg=mean(d)%ARL值
以上avg输出结果都会落在350~380左右,现在我想要把avg值给固定住
就是我这次avg值是375,下次在run一次也是375,run个n次还是375,
於是在我的程式码中加入了rng,如下
for j=1:1000
for i=1:1000
rng('default');
rng(i)
data=normrnd(mu,sigma,m,n);%随机产生常态机率的值(-3~3间)
data_total=[data_total; data];
if (data>3) || (data<-3)%若在-3与3之外,就停止回圈
break
end
end
d=[d;i];
end
avg=mean(d)%ARL值
以上的avg输出结果都一值落在72,但并不是我要的结果,
因为我点开d矩阵一看,1~1000个都是72,
又点了data矩阵一看,发现1~72笔数据、73~144、145~216以此类堆...
也就是每72笔乱数都一样,所以才会造成我的avg都一值落在72
主要是因为我的rng(i)碰上了if与break,所以第72笔break後就从1开始
而小弟要的结果是d矩阵不能都相同、rng(i)不受if回圈控制、avg值也跟原始一样落在
350~380左右,但下次再run时要跟上次一样
谢谢!!麻烦大大了!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.102.182.143
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1456930820.A.755.html
1F:→ celestialgod: rng放错位置,应该是在i外面,j里面 03/02 23:56
2F:→ celestialgod: rng(j) 03/02 23:56
3F:→ popo14777: 谢谢C大~已解决 03/03 00:29
c大不好意思,又有疑问
依照i跟j各有1000次,ij相乘後最大可出现1百万次
但种子只有1000个(j个),这样种子数目会不会不够呢?
※ 编辑: popo14777 (59.102.182.143), 03/03/2016 00:41:38
4F:推 JamesChen: 应该是最一开始下一个乱数种子吧0.9 03/03 03:51
5F:→ celestialgod: 最一开始也可以,SEED只要设定一次其实就可以了 03/03 09:40
6F:→ celestialgod: 我只是想说 你想要回圈里面,我才推rng(j) 03/03 09:41
7F:→ celestialgod: 设定好一次seed,他就会直接从那个seed开始生成乱数 03/03 09:41