为什么二维随机游走的一维变体不起作用?

时间:2015-01-22 21:08:34

标签: matlab random octave random-walk

有一个二维随机游走,人们可以找到here,它在Octave中完美运作。但是,当我尝试编写一维随机游走程序时,我收到了一个错误。这是程序:

t=[];
x=[];
for i=1:100000
    J=rand;
    if J<0.5
        x(i+1)=x(i)+1;
        t(i+1)=t(i)+1;
    else
        x(i+1)=x(i)-1;
        t(i+1)=t(i)+1;
    end
end

plot(t,x)

这是错误:

  

错误:A(I):索引越界;值1超出界限0

谢谢。

4 个答案:

答案 0 :(得分:4)

不需要循环:

N = 100000;
t = 1:N;
x = cumsum(2*(rand(1,N)<.5)-1);
plot(t,x)

enter image description here

对于2D情况,您可以使用相同的方法:

N = 100000;
%// t = 1:N; it won't be used in the plot, so not needed
x = cumsum(2*(rand(1,N)<.5)-1);
y = cumsum(2*(rand(1,N)<.5)-1);
plot(x,y)
axis square

enter image description here

答案 1 :(得分:2)

你得到一个错误是因为你要求MATLAB在第一次迭代中使用x(1),而你实际上将x定义为长度为0.所以你需要初始化x和{ {1}}具有适当的大小:

t

或更改循环以在向量的末尾添加新值:

x=zeros(1,100001);
t=zeros(1,100001);

答案 2 :(得分:1)

因为t和x是空的,所以你不能通过x(i + 1)和x(i)索引它们。 我相信你应该用全零来初始化x和t。

答案 3 :(得分:1)

在第一次迭代i = 1中,您有x(2) = x(1) +or- 1x的维度为零。您应该定义xt的起点,它通常是原点,您也可以稍微更改一下代码,

x = 0;
N = 100000;
t = 0 : N;
for i = 1 : N
    x(i+1) = x(i) + 2 * round(rand) - 1;
end
plot(t,x)