Simulating Brownian Motion in Matlab

Matlab → Simulation → Brownian Motion

The change in a variable z following a Brownian motion during a small period of time \Delta t is given by

\Delta z=\varepsilon\sqrt{\Delta t}

where \varepsilon has a standardized normal distribution with mean 0 and variance 1.

And, the change in the value of z from time 0 to t is the sum of the changes in z in n time intervals of length \Delta t , where

\Delta t=\frac{t}{n}

That is,

z(t)-z(0)=\sum_{i=1}^{i=n}\varepsilon_i \sqrt{\Delta t}

where \varepsilon_i=(i=1,2,3,...,n) has a standardized normal distribution with mean 0 and variance 1.

Simulation of Brownian motion in Matlab
t=1; n=500; dt=t/n;
z(1)=0;
for i=1:n
z(i+1)=z(i)+sqrt(dt)*randn;
end
plot([0:dt:t],z)

Brownian motion can also be simulated using the cumsum command in Matlab.

t=1; n=500; dt=t/n;
dz=sqrt(dt)*randn(1,n);
z=cumsum(dz);
plot([0:dt:t],[0,z])

Generalized Brownian Motion (Generalized Wiener Process)
A variable x following a generalized Brown can be given as

dx=adt+bdz

Where a and b are constants. And, the discrete time model is given by

\Delta x=a\Delta t+b\varepsilon\sqrt{\Delta t}

Similarly, the change in the value of x from time 0 to t is

x(t)-x(0)=a\Delta t+b\sum_{i=0}^{i=n}\varepsilon_i\sqrt{\Delta t}

Simulation of Generalized Brownian Motion (or Wiener Process) in Matlab
t=1; n=1000; dt=t/n;
dz=sqrt(dt)*randn(1,n);
dx=0.4*dt+1.8*dz;
x=cumsum(dx);
plot([0:dt:t],[0,x])

In the next example, Brownian motion and generalized Brownian motion (where a=0.4 and b=1.8 ) are plotted in the same graph.

Brownian Motion and Generalized Brownian Motion on the same graph, simulated using Matlab
t=1; n=1000; dt=t/n;
dz=sqrt(dt)*randn(1,n);
z=cumsum(dz);
plot([0:dt:t],[0,z],'r')
hold on
dx=0.4*dt+1.8*dz;
x=cumsum(dx);
plot([0:dt:t],[0,x],'g')