看板 MATLAB 關於我們 聯絡資訊
我想在程式裡寫一個會用到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
sin55688: randi的input要是正整數,檢查一下吧。不然應該不會有 04/06 12:14
sin55688: 問題 04/06 12:14
celestialgod: disp(ff)看有沒有出現負的就知道了... 04/06 12:22
celestialgod: 怪怪的,你是var=1, ff = 7, X(sol,var)的size只有1 04/06 12:30
celestialgod: randi(ff) size是7... 04/06 12:31
celestialgod: 沒事,我記錯input了 04/06 12:32
celestialgod: 建議附上錯誤訊息 比較好判斷 04/06 12:33
celestialgod: Error using randi First input must be a positive 04/06 12:33
celestialgod: scalar integer value IMAX 04/06 12:33
celestialgod: 出現上面的訊息就是你的ff出現非正整數 04/06 12:34
JACK19920102: 應該是! 因為我Nvar=8 所以 8-Nvar最後會出現0... 04/06 13:23
JACK19920102: 謝謝大大解惑 繼續修改中... 04/06 13:23
jatj: 這邊人都很熱心 不需要送東西獎勵 04/06 16:07
JACK19920102: P幣已送出... 04/11 13:27
JACK19920102: 想說這樣會比較多人回XDDDDD 04/11 13:28