Search code examples
matlabrandomoctaverandom-walk

Why does the one-dimensional variant of a 2-d random walk not work?


There is a two-dimensional random walk that one can find here which works perfectly in Octave. However, when I tried to write a one-dimensional random walk program, I got an error. Here is the program:

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)

Here is the error:

error: A(I): index out of bounds; value 1 out of bound 0

Thank you.


Solution

  • No need for a loop:

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

    enter image description here

    For the 2D case you could use the same approach:

    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