Search code examples
matlabrandom-walk

reflecting random walk in matlab?


I have a array of 10 vectors 'x' with as below (for simulating 1D random walk):

r=rand(10,1000);
r(r>.5)=1;
r(r<=.5)=-1;
x=cumsum(r);

The image of the one vector will be like:

enter image description here

If I consider 2 values in the sequence , say +10 and -10, then I would like to reflect the sequence 'x' when it reaches those values. How to achieve this?


Solution

  • Before answering your question, a should point that your code is broken. By default cumsum accumulate data across first dimension, to change this behavior you should specify dim parameter:

    x = cumsum(r,2);
    

    And, answering your question, you could simply invert all data above threshold:

    threshold = 10;
    
    nsteps = ceil( max(abs(x(:))) / (2*threshold) - 0.5 );
    for ii = 1:nsteps
        ind = abs(x) > 10;
        x(ind) = 20 * sign(x(ind)) - x(ind);
    end