Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: Re: random walk & random number
Date: Wed, 6 Nov 2013 21:11:06 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 28
Message-ID: <l5eb9a$s59$1@newscl01ah.mathworks.com>
References: <l5dauc$5p$1@newscl01ah.mathworks.com> <l5e0ii$d19$1@newscl01ah.mathworks.com> <l5e9di$77$1@newscl01ah.mathworks.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: rubyext-01-ls.mathworks.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: newscl01ah.mathworks.com 1383772266 28841 172.20.102.177 (6 Nov 2013 21:11:06 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Wed, 6 Nov 2013 21:11:06 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1187260
Xref: news.mathworks.com comp.soft-sys.matlab:804907

"nawal " <nawalyarey@gmail.com> wrote in message <l5e9di$77$1@newscl01ah.mathworks.com>...

> "Roger Stafford" wrote in message <l5e0ii$d19$1@newscl01ah.mathworks.com>...
> >  ..... To accomplish this it would be wise to enclose your code, including the necessary initializations, in an outer for-loop to do the appropriate repetition and collect the rg2 values in a vector, rather than manually repeating your code.

> What do you mean by outer for loop? I've just started learning matlab so I'm still not familiar with it.
- - - - - - - - - -
  By "outer loop" I mean doing something like: for k = 1:10000 in front of the code you wrote and at its end storing the rg2 you have calculated in a vector RG2 having 10000 (or whatever number of runs you select) elements with the line:

 RG2(k) = rg2;

After that of course you need an 'end' to terminate this outer loop.  Also you need to delete the plot command.

  I should point out that the code for producing a vector rg2 for a large number of runs can easily be vectorized rather than using nested for-loops, and besides having fewer lines of code it might execute faster.

 N = 10000; % Choose the desired number of hundred-step runs
 n = 100; % The number of steps in each run
 r = ceil(4*rand(n,N)); % Compute random integers from 1 to 4
 px = [1;0;-1;0]; py = [0;1;0;-1]; % Use these to translate them to 1, 0, and -1
 X = cumsum([zeros(1,N);reshape(px(r),n,N)],1); % Compute the random walks
 Y = cumsum([zeros(1,N);reshape(py(r),n,N)],1);
 rg2 = mean(X.^2,1)+mean(Y.^2,1)-mean(X,1).^2-mean(Y,1).^2; % Get variances

The quantity rg2 will be an N-element row vector containing your "distance" variance for each of the N runs.  You can use this to compute a histogram for it.

  Note: Of course you do not get to see the individual random walk plots this way.  For that you would have to set N equal to 1 in the above and do plot(X,Y) to see a typical walk.

Roger Stafford