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,但在代码清晰度方面,每一点都有帮助。