# RandomUnitary

 Other toolboxes required RandomUnitary Generates a random unitary or orthogonal matrix none RandomDensityMatrixRandomPOVMRandomStateVectorRandomSuperoperator Random things

RandomUnitary is a function that generates a random unitary or orthogonal matrix, uniformly according to Haar measure.

## Syntax

• U = RandomUnitary(DIM)
• U = RandomUnitary(DIM,RE)

## Argument descriptions

• DIM: The number of rows (or equivalently, columns) that U will have.
• RE (optional, default 0): A flag (either 0 or 1) indicating that U should only have real entries (RE = 1) or that it is allowed to have complex entries (RE = 0). That is, if you set RE = 1 then U will be an orthogonal matrix, not just a unitary matrix.

## Examples

### A random qubit gate

To generate a random quantum gate that acts on qubits, you could use the following code:

>> RandomUnitary(2)

ans =

0.2280 + 0.6126i  -0.2894 - 0.6993i
-0.3147 + 0.6883i  -0.2501 + 0.6039i

### A random orthogonal matrix

To generate a random orthogonal (rather than unitary) matrix, set RE = 1:

>> U = RandomUnitary(3,1)

U =

0.9805   -0.1869   -0.0603
0.1678    0.6381    0.7515
-0.1020   -0.7470    0.6570

To verify that this matrix is indeed orthogonal, we multiply it by its transpose:

>> U'*U

ans =

1.0000    0.0000    0.0000
0.0000    1.0000    0.0000
0.0000    0.0000    1.0000

### Moments of the trace of an orthogonal matrix

It was shown in this MathOverflow thread that if O is a random (according to Haar measure) 3-by-3 orthogonal matrix, then the expectated value of ${\mathrm Tr}(O)^{2k}$ for $k = 1, 2, 3, 4, \ldots$ is $1, 3, 15, 91, \ldots$ (sequence A099251 in the OEIS). We can use the RandomUnitary function to reproduce these values approximately as follows:

>> s = 10^5;
ct = zeros(1,4);
for j = 1:s
trO = trace(RandomUnitary(3,1))^2;
ct = ct + trO.^(1:4);
end
ct/s

ans =

0.9997    2.9917   14.9298   90.4464