I illustrate \eqref{eq:20151124b} in the case \( n = 5 \). The Mathematica code I use is

```
Clear[RandomMatrixGUE]
```

`(* This code calculates a random matrix from the GUE *) `

`RandomMatrixGUE[NN_] := Module[{A, B, H}, `

`A = RandomVariate[NormalDistribution[], {NN, NN}]; `

`B = RandomVariate[NormalDistribution[], {NN, NN}]; `

`H = 1/2 (A + Transpose[A]) + I / 2 (B - Transpose[B]); `

```
H]
```

```
(* Simulates a path of the Dyson Brownian motion
```

`in: `

`The dimension of the matrices is size x size. `

`T is the maximum time to simulate. `

```
NSteps is in how many steps you simulate.
```

```
out: a list of matrices X_t
*)
```

```
SimulateOnePath[Size_, T_, NSteps_] :=
Module[{dt = T/NSteps , path},
```

`path = Table[RandomMatrixGUE[Size] Sqrt[dt], {NSteps}]; `

`path = Accumulate[path]; `

`path = Prepend[path, ConstantArray[0, {Size, Size}]]; `

`path]`

```
(* plot all eigenvalues of the path X_t *)
```

`(* the code contains an ugly double loop *) `

```
PlotEigenValues[X_, dt_] :=
Module[{t = 0 , i, j, lambdapath, eig, NSteps = Length[X],
n = Length[X[[1]]]},
```

`lambdapath = ConstantArray[{}, n]; `

`For[i = 1, i <= NSteps, i++, `

`eig = Eigenvalues[X[[i]]]; `

`eig = Sort[eig]; `

```
For[ j = 1, j <= n, j++,
lambdapath[[j]] = Append[lambdapath[[j]], {t, eig[[j]]}]];
```

`t = t + dt]; `

`ListPlot[lambdapath, Joined -> True]] `

`T = 1; `

`NSteps = 1000; `

`X = SimulateOnePath[5, T, NSteps]; `

`PlotEigenValues[X, T/NSteps] `

This produces the following graph.

The eigenvalues \( \lambda_1, \lambda_2, \ldots, \lambda_5 \) as function of time |

5 paths of the Brownian motion |

__Further reading__

- A proof of \eqref{eq:20151124b} follows quite easily if one uses 1st and 2nd order perturbation formulas from quantum mechanics on the expansion \( \lambda_i ( X_t + H \sqrt{dt} ) \). Details can for example be found in this blog post by Terence Tao.
- In the next post I perform a similar simulation for the Ornstein-Uhlenbeck process \begin{equation*} dX_t = -\alpha X_t dt + H \sqrt{dt} \end{equation*} There the repulsive effect is even more striking because the process tries to move \( X_t \) back to \( 0\) if \( \alpha > 0 \) .

## No comments:

## Post a Comment