Matlab 函数工作不规律,其他一些时候返回错误


function [N] = rand_walk1(n)
j = zeros(1,n); %j will be the output vector
i=2;
for i= 2:n        %This 'for' loop will randomly add or subtract 1 to each entry of the vector j, starting from j(2).
   if rand >= 0.5 %This 'if' statement returns 1 or -1 with equal probability (it uses the uniform distribution with parameters [0,1]).
      v = 1;
   elseif rand <0.5
      v = -1;
   end
   j(i)=j(i-1)+v;
end
N = j;
end

这是我的函数,有时它可以工作,有时它会返回以下错误:

Error in rand_walk1 (line 10)
j(i)=j(i-1)+v;

关于为什么我随机收到此错误,而其他时候该功能工作的任何想法?

有时,v是未分配的。让我们看看你的随机数生成:

if rand >= 0.5 
   v = 1;
elseif rand <0.5
   v = -1;
end

if设置v = 1一半的时间。另一半时间,你想设置v = -1.但是你正在做的是创建一个新的随机数并检查它。如果这个新的随机数小于0.5,你会得到一个好的结果。如果它大于 0.5 ,你只会失败,v将保持不变。如果这是您第一次通过循环,则无需更改,因此v将保持未分配状态。那是你收到错误的时候。

相反,您希望执行以下操作:

if rand >= 0.5 
   v = 1;
else
   v = -1;
end

这样,如果您的结果是 < 0.5 ,您每次都设置v = -1。它必须是非此即彼。您不必再次检查。


我想指出的是,这个错误有点棘手的原因之一是你调用了函数rand,后面没有任何括号。 rand可能会被误认为是变量名,而rand()显然是一个没有参数的函数调用。没什么大不了的,而且完全合法的 MATLAB,但在代码清晰度方面,每一点都有帮助。

最新更新