[讨论] 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