DickeState

From QETLAB
Jump to: navigation, search
DickeState
Generates a Dicke state

Other toolboxes required none
Related functions GHZState
MaxEntangled
WState
Function category Special states, vectors, and operators

DickeState is a function that returns a Dicke state on a given number of qubits. For example, the usual $3$-qubit Dicke state is: \[\frac{1}{\sqrt{3}}(|001\rangle + |010\rangle + |100\rangle).\] More generally, the Dicke state on $N$ qubits with $k$ excitations is \[\frac{1}{\sqrt{\binom{N}{k}}}\sum_{j} P_j \big(|0\rangle^{\otimes (N-k)} \otimes|1\rangle^{\otimes k} \big),\] where $P_j$ ranges over all operators that permute the $N$ qubits in the $\binom{N}{k}$ possible distinct ways. The output of this function is a sparse vector.

Syntax

  • DICKE_STATE = DickeState(N)
  • DICKE_STATE = DickeState(N,K)
  • DICKE_STATE = DickeState(N,K,NRML)

Argument descriptions

  • N: The number of qubits.
  • K (optional, default 1): The number of excitations (i.e., the number of "1" qubits in each term of the superposition; must be between 0 and N, inclusive.
  • NRML (optional, default 1): A flag (either 1 or 0) indicating that DICKE_STATE should or should not be scaled to have Euclidean norm 1. If NRML=0 then each entry of DICKE_STATE is 0 or 1, so it has norm $\sqrt{\binom{N}{k}}$.

Examples

3-qubit Dicke state

The following code generates the 3-qubit Dicke state (with 1 excitation):

>> full(DickeState(3))
 
ans =
 
         0
    0.5774
    0.5774
         0
    0.5774
         0
         0
         0

A 5-qubit Dicke state

The following code generates the 5-qubit 2-excitation Dicke state \[\frac{1}{\sqrt{10}}\big( |00011\rangle + |00101\rangle + |00110\rangle + |01001\rangle + |01010\rangle + |01100\rangle + |10001\rangle + |10010\rangle + |10100\rangle + |11000\rangle \big).\]

>> DickeState(5,2)
 
ans =
 
   (4,1)       0.3162
   (6,1)       0.3162
   (7,1)       0.3162
  (10,1)       0.3162
  (11,1)       0.3162
  (13,1)       0.3162
  (18,1)       0.3162
  (19,1)       0.3162
  (21,1)       0.3162
  (25,1)       0.3162

A very large Dicke state

This script has no trouble creating Dicke states on very large numbers of qubits. The following code generates a 45-qubit Dicke state:

>> tic; DickeState(45); toc
Elapsed time is 0.101930 seconds.

Note that Octave has a size limit of 2^31-1, so DickeState(30) is the limit of this function there. DickeState(31) and larger will produce an error in Octave (but not MATLAB).

Source code

Click on "expand" to the right to view the MATLAB source code for this function.

  1. %%  DICKESTATE    Generates a Dicke state
  2. %   This function has one required input argument:
  3. %     N: the number of qubits in the Dicke state
  4. %
  5. %   DICKE_STATE = DickeState(N) returns the N-qubit Dicke state, originally 
  6. %   introduced in [1] for describing light emission from a cloud of atoms. 
  7. %   These symmetric states are in a sense "far from separable". Refer to 
  8. %   [2] for a more recent exposition on Dicke states. The output of this
  9. %   function is sparse.
  10. %
  11. %   This function has three optional input arguments:
  12. %     K (default 1): number of excitations
  13. %     NRML (default 1): a flag, either 1 or 0, specifying normalization
  14. %
  15. %   DICKE_STATE = DickeState(N,K,NRML) is as above, but generates the Dicke
  16. %   state with K-level excitations and is normalized to have norm 1 if
  17. %   NRML = 1 (and has all entries either 0 or 1 if NRML = 0).
  18. %
  19. %	References:
  20. %   [1] R.H. Dicke. Coherence in spontaneous radiation processes. Phys. 
  21. %       Rev. 93, 99. 1954.
  22. %       
  23. %   [2] M. Bergmann and O. Guhne. Entanglement criteria for Dicke states.
  24. %       E-print: arXiv:1305.2818 [quant-ph]. 2013.
  25. %   
  26. %   [3] E. Wolfe and S.F. Yelin. Certifying separability in symmetric mixed
  27. %       states, and superradiance. E-print: arXiv:1307.5779 [quant-ph].
  28. %       2013.
  29. %
  30. %	URL: http://www.qetlab.com/DickeState
  31.  
  32. %	requires: opt_args.m, TensorSum.m, unique_perms.m
  33. % 	authors: Vincent Russo (vrusso@uwaterloo.ca)
  34. %            Nathaniel Johnston (nathaniel@njohnston.ca)
  35. %	package: QETLAB 
  36. %	last updated: December 15, 2014
  37.  
  38. function dicke_state = DickeState(N,varargin)
  39.  
  40. % set optional argument defaults: k = 1, nrml = 1
  41. [k,nrml] = opt_args({ 1, 1 },varargin{:});
  42.  
  43. % Make sure that k is valid.
  44. if k < 0 || k > N
  45.     error('DickeState:InvalidK','K must be an integer between 0 and N, inclusive.');
  46. end
  47.  
  48. num_terms = nchoosek(N,k);
  49.  
  50. id = speye(2); % generate the appropriate qubit |0> and |1> states
  51. init_state = [ones(1,k),zeros(1,N-k)];
  52.  
  53. % Each row of the following matrix corresponds to one of the terms in the
  54. % sum that defined the Dicke state.
  55. perm_matrix = unique_perms(init_state);
  56.  
  57. % Generate the Dicke state itself from the (0,1)-labelled terms in the
  58. % previous matrix.
  59. for i = N:-1:1
  60.     dicke_terms{i} = id(:,perm_matrix(:,i)+1);
  61. end
  62. dicke_state = TensorSum(dicke_terms{:});
  63.  
  64. % Normalize the state, if requested.
  65. if(nrml == 1)
  66.     dicke_state = dicke_state / sqrt(num_terms);
  67. end