Difference between revisions of "RandomUnitary"

From QETLAB
Jump to navigation Jump to search
(Created page with "{{Function |name=RandomUnitary |desc=Generates a random unitary or orthogonal matrix |req=opt_args |rel=RandomDensityMatrix<br />RandomStateVector<br />[[R...")
 
Line 76: Line 76:
  
 
Please remember that constructing random sparse unitary matrices in this way is ''very'' approximate &ndash; it is not uniformly distributed in any meaningful sense and the number of non-zero elements will sometimes not be very close to <tt>DENS*DIM^2</tt>.
 
Please remember that constructing random sparse unitary matrices in this way is ''very'' approximate &ndash; it is not uniformly distributed in any meaningful sense and the number of non-zero elements will sometimes not be very close to <tt>DENS*DIM^2</tt>.
 +
 +
==Notes==
 +
The random unitary matrix is generated by constructing a [[Ginibre ensemble]] of appropriate size, performing a [http://en.wikipedia.org/wiki/QR_decomposition QR decomposition] on that ensemble, and then multiplying the columns of the unitary matrix Q by the sign of the corresponding diagonal entries of R.<ref>Māris Ozols. ''[http://home.lu.lv/~sd20008/papers/essays/Random%20unitary%20%5Bpaper%5D.pdf How to generate a random unitary matrix]'', 2009.</ref>
 +
 +
==References==
 +
<references />

Revision as of 19:38, 22 November 2012

RandomUnitary
Generates a random unitary or orthogonal matrix

Other toolboxes required opt_args
Related functions RandomDensityMatrix
RandomStateVector
RandomSuperoperator

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)
  • U = RandomUnitary(DIM,RE,DENS)

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 = 1). That is, if you set RE = 1 then U will be an orthogonal matrix, not just a unitary matrix.
  • DENS (optional, default 1): If equal to 1 then U will be a full matrix. If 0 <= DEN < 1 then U will be sparse with approximately DENS*DIM^2 non-zero entries. Note that the number of non-zero entries in this case is *very* approximate. Furthermore, if DENS < 1 then the distribution of U is no longer uniform in any mathematically well-defined sense.

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

A random sparse unitary matrix

To generate an 8-by-8 sparse unitary matrix with approximately 1/4 of its entries non-zero, we can use the following line of code:

>> RandomUnitary(8,0,1/4)

ans =

   (2,1)           0 + 0.7140i
   (7,1)     -0.0000 + 0.7002i
   (2,2)      0.5448 + 0.0000i
   (5,2)      0.6281          
   (7,2)     -0.5555 - 0.0000i
   (2,3)      0.4398 - 0.0000i
   (5,3)     -0.7781 + 0.0000i
   (7,3)     -0.4485 + 0.0000i
   (8,4)           0 - 1.0000i
   (1,5)      1.0000          
   (3,6)      1.0000          
   (4,7)      1.0000          
   (6,8)      1.0000          

Please remember that constructing random sparse unitary matrices in this way is very approximate – it is not uniformly distributed in any meaningful sense and the number of non-zero elements will sometimes not be very close to DENS*DIM^2.

Notes

The random unitary matrix is generated by constructing a Ginibre ensemble of appropriate size, performing a QR decomposition on that ensemble, and then multiplying the columns of the unitary matrix Q by the sign of the corresponding diagonal entries of R.[1]

References