[問題]固定亂數與if結構

看板MATLAB作者 (草草)時間9年前 (2016/03/02 23:00), 9年前編輯推噓1(106)
留言7則, 3人參與, 最新討論串1/1
小弟想要把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://www.ptt.cc/bbs/MATLAB/M.1456930820.A.755.html

03/02 23:56, , 1F
rng放錯位置,應該是在i外面,j裡面
03/02 23:56, 1F

03/02 23:56, , 2F
rng(j)
03/02 23:56, 2F

03/03 00:29, , 3F
謝謝C大~已解決
03/03 00:29, 3F
c大不好意思,又有疑問 依照i跟j各有1000次,ij相乘後最大可出現1百萬次 但種子只有1000個(j個),這樣種子數目會不會不夠呢? ※ 編輯: popo14777 (59.102.182.143), 03/03/2016 00:41:38

03/03 03:51, , 4F
應該是最一開始下一個亂數種子吧0.9
03/03 03:51, 4F

03/03 09:40, , 5F
最一開始也可以,SEED只要設定一次其實就可以了
03/03 09:40, 5F

03/03 09:41, , 6F
我只是想說 你想要迴圈裡面,我才推rng(j)
03/03 09:41, 6F

03/03 09:41, , 7F
設定好一次seed,他就會直接從那個seed開始生成亂數
03/03 09:41, 7F
文章代碼(AID): #1Mrm04TL (MATLAB)
文章代碼(AID): #1Mrm04TL (MATLAB)