Matlab函数工作不正常,有些时候会返回错误

时间:2016-01-18 22:51:32

标签: 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;

为什么我会随机获取此错误的任何想法,而其他一些时候该函数有效?

1 个答案:

答案 0 :(得分:3)

有时,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 。它必须是一个或另一个。您无需再次检查。

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