WernerState: Difference between revisions

From QETLAB
Jump to navigation Jump to search
Created page with "{{Function |name=WernerState |desc=Produces a Werner state |req=opt_args<br />PermutationOperator<br />PermuteSystems<br />Swap<br />SwapOperator |rel=..."
 
m Corrected date
 
(3 intermediate revisions by the same user not shown)
Line 2: Line 2:
|name=WernerState
|name=WernerState
|desc=Produces a [[Werner state]]
|desc=Produces a [[Werner state]]
|req=[[opt_args]]<br />[[PermutationOperator]]<br />[[PermuteSystems]]<br />[[Swap]]<br />[[SwapOperator]]
|rel=[[IsotropicState]]
|rel=[[IsotropicState]]
|upd=November 17, 2012
|cat=[[List of functions#Special_states,_vectors,_and_operators|Special states, vectors, and operators]]
|v=1.00}}
|upd=November 12, 2014
<tt>'''WernerState'''</tt> is a [[List of functions|function]] that returns the [[Werner state]] requested by the user. The Werner state may be bipartite or multipartite and either full or sparse.
|v=0.51}}
<tt>'''WernerState'''</tt> is a [[List of functions|function]] that returns the Werner state (i.e., a state of the following form):<ref name="Wer89">R. F. Werner. Quantum states with Einstein-Podolsky-Rosen correlations admitting a hidden-variable model. ''Phys. Rev. A'', 40(8):4277&ndash;4281.</ref>
<center><math>\displaystyle\rho_\alpha := \frac{1}{d^2-d\alpha}\big(I \otimes I - \alpha S\big) \in M_d \otimes M_d,</math></center>
where $S$ is the [[SwapOperator|swap operator]]. This function is also capable of producing multipartite Werner states. The output of this function is always sparse.


==Syntax==
==Syntax==
* <tt>RHO = WernerState(DIM,ALPHA)</tt>
* <tt>RHO = WernerState(DIM,ALPHA)</tt>
* <tt>RHO = WernerState(DIM,ALPHA,SP)</tt>


==Argument descriptions==
==Argument descriptions==
Line 17: Line 18:
** If <tt>ALPHA</tt> is a scalar, the Werner state returned is the normalization of <tt>I - ALPHA*S</tt>, where <tt>I</tt> is the identity matrix and <tt>S</tt> is the bipartite swap operator.
** If <tt>ALPHA</tt> is a scalar, the Werner state returned is the normalization of <tt>I - ALPHA*S</tt>, where <tt>I</tt> is the identity matrix and <tt>S</tt> is the bipartite swap operator.
** If <tt>ALPHA</tt> is a vector of length p! - 1 for some integer p, the Werner state returned is a multipartite state acting on p copies of <tt>DIM</tt>-dimensional space. More explicitly, the state returned is the normalization of <tt>I - ALPHA(1)*P(2) - ... - ALPHA(p!-1)*P(p!)</tt>, where <tt>P(i)</tt> is the operator that permutes the p subsystems according to the i-th permutation (when the permutations are ordered in ascending lexicographical order).
** If <tt>ALPHA</tt> is a vector of length p! - 1 for some integer p, the Werner state returned is a multipartite state acting on p copies of <tt>DIM</tt>-dimensional space. More explicitly, the state returned is the normalization of <tt>I - ALPHA(1)*P(2) - ... - ALPHA(p!-1)*P(p!)</tt>, where <tt>P(i)</tt> is the operator that permutes the p subsystems according to the i-th permutation (when the permutations are ordered in ascending lexicographical order).
* <tt>SP</tt> (optional, default 0): A flag (either 1 or 0) indicating that the Werner state produced should or should not be sparse.


==Examples==
==Examples==
===A qutrit Werner state===
===A qutrit Werner state===
To generate the Werner state with parameter $\alpha = 1/2$, the following code suffices:
To generate the Werner state with parameter $\alpha = 1/2$, the following code suffices:
<pre>
<syntaxhighlight>
>> WernerState(3,1/2)
>> full(WernerState(3,1/2))


ans =
ans =
Line 36: Line 36:
         0        0        0        0        0  -0.0667        0    0.1333        0
         0        0        0        0        0  -0.0667        0    0.1333        0
         0        0        0        0        0        0        0        0    0.0667
         0        0        0        0        0        0        0        0    0.0667
</pre>
</syntaxhighlight>


Werner states in general have a lot of zero entries, so you will usually save a lot of memory by specifying <tt>SP = 1</tt>, which causes the Werner state that is generated to be sparse:
Werner states in general have a lot of zero entries, so this function always returns a sparse matrix. If you want a full matrix (as above), use MATLAB's [http://www.mathworks.com/access/helpdesk/help/techdoc/ref/full.html full] function.
<pre>
<syntaxhighlight>
>> WernerState(3,1/2,1)
>> WernerState(3,1/2)


ans =
ans =
Line 59: Line 59:
   (8,8)      0.1333
   (8,8)      0.1333
   (9,9)      0.0667
   (9,9)      0.0667
</pre>
</syntaxhighlight>


===A multipartite Werner state===
===A multipartite Werner state===
In the multipartite setting, the family of Werner states is specified by more than 1 parameter <tt>ALPHA</tt>, so we need to provide more than 1 parameter to the <tt>WernerState</tt> function. In the [[tripartite]] case, there are 3! - 1 = 5 parameters that we need to specify: one for each of the non-identity permutations of the systems. The lexicographical ordering of the permutations of three elements is: 123, 132, 213, 231, 312, 321. Thus the following code produces the Werner state that is the normalization of $I - 0.01 P_{1,3,2} - 0.02 P_{2,1,3} - 0.03 P_{2,3,1} - 0.04 P_{3,1,2} - 0.05 P_{3,2,1}$, where $P_{x,y,z}$ is the permutation operator that maps $|v_1\rangle \otimes |v_2\rangle \otimes |v_3\rangle$ to $|v_x\rangle \otimes |v_y\rangle \otimes |v_z\rangle$:
In the multipartite setting, the family of Werner states is specified by more than 1 parameter <tt>ALPHA</tt>, so we need to provide more than 1 parameter to the <tt>WernerState</tt> function. In the tripartite case, there are 3! - 1 = 5 parameters that we need to specify: one for each of the non-identity permutations of the systems. The lexicographical ordering of the permutations of three elements is: 123, 132, 213, 231, 312, 321. Thus the following code produces the Werner state that is the normalization of $I - 0.01 P_{1,3,2} - 0.02 P_{2,1,3} - 0.03 P_{2,3,1} - 0.04 P_{3,1,2} - 0.05 P_{3,2,1}$, where $P_{x,y,z}$ is the permutation operator that maps $|v_1\rangle \otimes |v_2\rangle \otimes |v_3\rangle$ to $|v_x\rangle \otimes |v_y\rangle \otimes |v_z\rangle$:
<pre>
<syntaxhighlight>
>> WernerState(2,[0.01,0.02,0.03,0.04,0.05])
>> full(WernerState(2,[0.01,0.02,0.03,0.04,0.05]))


ans =
ans =
Line 76: Line 76:
         0        0        0  -0.0106        0  -0.0066    0.1300        0
         0        0        0  -0.0106        0  -0.0066    0.1300        0
         0        0        0        0        0        0        0    0.1127
         0        0        0        0        0        0        0    0.1127
</pre>
</syntaxhighlight>
 
{{SourceCode|name=WernerState}}
 
==References==
<references />

Latest revision as of 17:54, 12 November 2014

WernerState
Produces a Werner state

Other toolboxes required none
Related functions IsotropicState
Function category Special states, vectors, and operators

WernerState is a function that returns the Werner state (i.e., a state of the following form):[1]

<math>\displaystyle\rho_\alpha := \frac{1}{d^2-d\alpha}\big(I \otimes I - \alpha S\big) \in M_d \otimes M_d,</math>

where $S$ is the swap operator. This function is also capable of producing multipartite Werner states. The output of this function is always sparse.

Syntax

  • RHO = WernerState(DIM,ALPHA)

Argument descriptions

  • DIM: Dimension of the local subsystems on which RHO acts.
  • ALPHA: A parameter that specifies which Werner state is to be returned as follows:
    • If ALPHA is a scalar, the Werner state returned is the normalization of I - ALPHA*S, where I is the identity matrix and S is the bipartite swap operator.
    • If ALPHA is a vector of length p! - 1 for some integer p, the Werner state returned is a multipartite state acting on p copies of DIM-dimensional space. More explicitly, the state returned is the normalization of I - ALPHA(1)*P(2) - ... - ALPHA(p!-1)*P(p!), where P(i) is the operator that permutes the p subsystems according to the i-th permutation (when the permutations are ordered in ascending lexicographical order).

Examples

A qutrit Werner state

To generate the Werner state with parameter $\alpha = 1/2$, the following code suffices:

>> full(WernerState(3,1/2))

ans =

    0.0667         0         0         0         0         0         0         0         0
         0    0.1333         0   -0.0667         0         0         0         0         0
         0         0    0.1333         0         0         0   -0.0667         0         0
         0   -0.0667         0    0.1333         0         0         0         0         0
         0         0         0         0    0.0667         0         0         0         0
         0         0         0         0         0    0.1333         0   -0.0667         0
         0         0   -0.0667         0         0         0    0.1333         0         0
         0         0         0         0         0   -0.0667         0    0.1333         0
         0         0         0         0         0         0         0         0    0.0667

Werner states in general have a lot of zero entries, so this function always returns a sparse matrix. If you want a full matrix (as above), use MATLAB's full function.

>> WernerState(3,1/2)

ans =

   (1,1)       0.0667
   (2,2)       0.1333
   (4,2)      -0.0667
   (3,3)       0.1333
   (7,3)      -0.0667
   (2,4)      -0.0667
   (4,4)       0.1333
   (5,5)       0.0667
   (6,6)       0.1333
   (8,6)      -0.0667
   (3,7)      -0.0667
   (7,7)       0.1333
   (6,8)      -0.0667
   (8,8)       0.1333
   (9,9)       0.0667

A multipartite Werner state

In the multipartite setting, the family of Werner states is specified by more than 1 parameter ALPHA, so we need to provide more than 1 parameter to the WernerState function. In the tripartite case, there are 3! - 1 = 5 parameters that we need to specify: one for each of the non-identity permutations of the systems. The lexicographical ordering of the permutations of three elements is: 123, 132, 213, 231, 312, 321. Thus the following code produces the Werner state that is the normalization of $I - 0.01 P_{1,3,2} - 0.02 P_{2,1,3} - 0.03 P_{2,3,1} - 0.04 P_{3,1,2} - 0.05 P_{3,2,1}$, where $P_{x,y,z}$ is the permutation operator that maps $|v_1\rangle \otimes |v_2\rangle \otimes |v_3\rangle$ to $|v_x\rangle \otimes |v_y\rangle \otimes |v_z\rangle$:

>> full(WernerState(2,[0.01,0.02,0.03,0.04,0.05]))

ans =

    0.1127         0         0         0         0         0         0         0
         0    0.1300   -0.0066         0   -0.0106         0         0         0
         0   -0.0053    0.1260         0   -0.0080         0         0         0
         0         0         0    0.1313         0   -0.0066   -0.0119         0
         0   -0.0119   -0.0066         0    0.1313         0         0         0
         0         0         0   -0.0080         0    0.1260   -0.0053         0
         0         0         0   -0.0106         0   -0.0066    0.1300         0
         0         0         0         0         0         0         0    0.1127

Source code

Click here to view this function's source code on github.

References

  1. R. F. Werner. Quantum states with Einstein-Podolsky-Rosen correlations admitting a hidden-variable model. Phys. Rev. A, 40(8):4277–4281.