[討論] randi() 裡面放變數的問題 (送100P)

看板MATLAB作者時間9年前 (2016/04/06 11:59), 編輯推噓1(1014)
留言15則, 4人參與, 最新討論串1/1
我想在程式裡寫一個會用到randi函數的for迴圈 for c=1:Nvar z = 8-c; X(sol,c) = randi(z); end %或是改寫成一行 X(sol,c) = randi(8-c); 但是程式執行卻發生錯誤 我本來以為是randi()函數裡面只能放數字 不能放變數 但是我後來發現在程式其他地方 randi()裡面放變數卻可以順利執行 我就把 z = 8-c; 放到程式最一開始做宣告 就可以用了 但是後面的程式 for var=1:Nvar random_number=rand; if random_number < Cg X(sol,var)=pX(gBest,var); elseif random_number< Cp X(sol,var)=pX(sol,var); elseif random_number < Cw continue; else X(sol,var)=randi(var); end end 原本這裡randi()裡面是8-var 結果程式錯誤 我把他試著用var放進去 卻可以跑? 但我var也沒有特別在程式開始宣告 是在 for var=1:Nvar 才第一次出現 為何這裡randi()裡面的變數 又不用在程式最前面宣告 就能跑了? 差別在哪裡? 我試著改寫成這樣 把ff宣告在if-else的外面 結果還是不能跑 for var=1:Nvar random_number=rand; ff = 8-var; if random_number < Cg X(sol,var)=pX(gBest,var); elseif random_number< Cp X(sol,var)=pX(sol,var); 1elseif random_number < Cw continue; else X(sol,var)=randi(ff); end end 先感謝前輩回答! 前三名推文的id各送100p聊表心意 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.54.67 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1459915147.A.084.html

04/06 12:14, , 1F
randi的input要是正整數,檢查一下吧。不然應該不會有
04/06 12:14, 1F

04/06 12:14, , 2F
問題
04/06 12:14, 2F

04/06 12:22, , 3F
disp(ff)看有沒有出現負的就知道了...
04/06 12:22, 3F

04/06 12:30, , 4F
怪怪的,你是var=1, ff = 7, X(sol,var)的size只有1
04/06 12:30, 4F

04/06 12:31, , 5F
randi(ff) size是7...
04/06 12:31, 5F

04/06 12:32, , 6F
沒事,我記錯input了
04/06 12:32, 6F

04/06 12:33, , 7F
建議附上錯誤訊息 比較好判斷
04/06 12:33, 7F

04/06 12:33, , 8F
Error using randi First input must be a positive
04/06 12:33, 8F

04/06 12:33, , 9F
scalar integer value IMAX
04/06 12:33, 9F

04/06 12:34, , 10F
出現上面的訊息就是你的ff出現非正整數
04/06 12:34, 10F

04/06 13:23, , 11F
應該是! 因為我Nvar=8 所以 8-Nvar最後會出現0...
04/06 13:23, 11F

04/06 13:23, , 12F
謝謝大大解惑 繼續修改中...
04/06 13:23, 12F

04/06 16:07, , 13F
這邊人都很熱心 不需要送東西獎勵
04/06 16:07, 13F

04/11 13:27, , 14F
P幣已送出...
04/11 13:27, 14F

04/11 13:28, , 15F
想說這樣會比較多人回XDDDDD
04/11 13:28, 15F
文章代碼(AID): #1N18cB24 (MATLAB)
文章代碼(AID): #1N18cB24 (MATLAB)