# DickeState

 Other toolboxes required DickeState Generates a Dicke state none GHZStateMaxEntangledWState 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