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.

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