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

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

Links booklink

Contact Us: admin [ a t ] ucptt.com