函数输出与函数约束相矛盾

时间:2016-01-19 01:30:18

标签: matlab

我编写了一个函数,它将自然数'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。有没有人对我可以改变什么有任何建议来解决这个问题?

1 个答案:

答案 0 :(得分:1)

第10行将当前位置推送到向量j

j(i)=j(i-1)+v;

然后第11行将相同的值连接到数组的末尾

j = [j,j(i)];

只需删除第11行。

通常的旁注,符号ij通常用于产生虚数,通常被误用作索引变量。它是recommended by Mathworks

  

由于i是一个函数,因此可以重写它并将其用作变量。但是,如果您打算在复杂算术中使用变量名,最好避免使用ij

在这种情况下,没有必要,但我喜欢在可能的情况下推广良好的编程实践(同样,由于这种做法,我需要强迫我的大脑思考你的代码)。