当我执行此功能时:
function generate(x)
for k=1:257
x= round(rand*9);
vet = x*ones(1,16);
i= round(rand*length(vet));
val= round(rand*257);
vet(i)=val
vet= dec2hex (vet)
endfor
endfunction
我发现这个错误,我不明白:
error: generate: subscript indices must be either positive integers less than 2^31 or logicals
error: called from
generate at line 8 column 9
如果你能帮助我,我将非常感激。
答案 0 :(得分:3)
我使用MATLAB R2015a来复制行为。错误文本略有不同,但代码要点与octave
相同 round(something)
可以生成0
。当我运行你的代码时,它每隔一段时间就会遇到一个0
并与
Attempted to access vet(0); index must be a positive integer or logical.
因为0
不是正整数,在其他索引为正整数的情况下也不合逻辑。要解决此问题,我建议将ii
中的所有零更改为1:
for k=1:257
x= round(rand*9);
vet = x*ones(1,16);
ii= round(rand*length(vet));
ii(ii==0)=1;
val= round(rand*257);
vet(ii)=val;
vet= dec2hex (vet);
end % endfor for octave
请注意,我将 i
更改为 ii
, i
is a built-in function
另一种方法是不使用round
,而是使用ceil
。这样它总是四舍五入到正无穷大,即只使用正数时它永远不会达到0
:
for k=1:257
x= round(rand*9);
vet = x*ones(1,16);
ii= ceil(rand*length(vet));
val= round(rand*257);
vet(ii)=val;
vet= dec2hex (vet);
end % endfor for octave