Brownian Motion in MATLAB

• Jan 27th 2010, 05:38 PM
Anonymous1
Brownian Motion in MATLAB
Hey,

I'm supposed to use a box-muller transform to generate two independent realizations of Brownian motions.

I have not had much exposure to Brownian Motion. So, I've got the Box-Muller Transform done and I'm drawing a blank on what to do next in order to "generate two independent realizations of Brownian motions."

Any help is greatly appreciated.

Thanks.
• Jan 27th 2010, 11:56 PM
Moo
Hello,

Here is what we did in Scilab (should be similar to Matlab) for a Brownian motion :

Code:

```function X=Brownian(N,T)   X=zeros(N+1,1);   X(1)=0;   for k=2:(N+1)     X(k)=X(k-1)+(T/sqrt(N))*rand(1,1,'norm');   end endfunction X=Brownian(200,1); clf(); plot(X)```
Adapt it to get 2 Brownian motion (should not be difficult, since the BM transform actually gives 2 normal random variables ^^)
• Jan 28th 2010, 06:43 AM
Laurent
Quote:

Originally Posted by Moo
Code:

```function X=Brownian(N,T)   X=zeros(N+1,1);   X(1)=0;   for k=2:(N+1)     X(k)=X(k-1)+(T/sqrt(N))*rand(1,1,'norm');   end endfunction X=Brownian(200,1); clf(); plot(X)```

Just a few tips...
I guess T is the final time; so it should be "sqrt(T)" in the formula. And for this scaling to have some meaning, time should be scaled as well (on the plot).
As a piece of advice: you shouldn't perform the multiplication by sqrt(T/N) at each step: scilab is going to compute N times this square root. And scilab is very matrix oriented (matlab=matrix laboratory, I think) so my program in scilab would be, in one line:
Code:

`T=5;N=200;plot((0:N)*T/N,sqrt(T/N)*cumsum([0;rand(N,1,'normal')]));`
(cumsum gives the cumulated sum of a vector : [X(1), X(1)+X(2), ...], very convenient)
• Jan 28th 2010, 06:46 AM
Moo
I trust you lol. It has been one year since we wrote this, and we just copied what the teacher wrote (Evilgrin)