我编写了一个函数,它将自然数'n'作为输入,并从0开始输出随机游走,其中向量中的每个后续条目都是通过在前一个条目中加1或减1来获得的。随机游走必须在到达n或-n时停止。
代码如下
function [N] = rand_walk2(n)
j=0; %J will be the outpur of the function
v=0; %Defines variable v.
i=2; %The following 'while' loop will start from the second entry of the vector.
while abs(j(i-1)) < n %This 'while' loop will continue running only if the previous entry is strictly between -n and n.
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;
else v = -1;
end
j(i)=j(i-1)+v;
j = [j,j(i)];
i=i+1;
end
N = j;
end
问题是输出返回n或-n两次而不是只返回一次,例如,如果我评估rand_walk2(3)
,我得到0 -1 -2 -3 -3
而不是o -1 -2 -3
。有没有人对我可以改变什么有任何建议来解决这个问题?
答案 0 :(得分:1)
第10行将当前位置推送到向量j
j(i)=j(i-1)+v;
然后第11行将相同的值连接到数组的末尾
j = [j,j(i)];
只需删除第11行。
通常的旁注,符号i
和j
通常用于产生虚数,通常被误用作索引变量。它是recommended by Mathworks:
由于
i
是一个函数,因此可以重写它并将其用作变量。但是,如果您打算在复杂算术中使用变量名,最好避免使用i
和j
。
在这种情况下,没有必要,但我喜欢在可能的情况下推广良好的编程实践(同样,由于这种做法,我需要强迫我的大脑思考你的代码)。