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;
为什么我会随机获取此错误的任何想法,而其他一些时候该函数有效?
答案 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,但在代码清晰度方面,每一点都有帮助。