Difference between revisions of "OperatorSchmidtDecomposition"

From QETLAB
Jump to navigation Jump to search
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:
 
|name=OperatorSchmidtDecomposition
 
|name=OperatorSchmidtDecomposition
 
|desc=Computes the operator Schmidt decomposition of a bipartite operator
 
|desc=Computes the operator Schmidt decomposition of a bipartite operator
|rel=[[FilterNormalForm]]<br />[[IsProductOperator]]<br />[[OperatorSchmidtRank]]<br />[[SchmidtDecomposition]]<br />[[SchmidtNumber]]<br />[[TensorSum]]
+
|rel=[[FilterNormalForm]]<br />[[IsProductOperator]]<br />[[OperatorSchmidtRank]]<br />[[SchmidtDecomposition]]<br />[[TensorSum]]
 
|cat=[[List of functions#Entanglement_and_separability|Entanglement&nbsp;and&nbsp;separability]]
 
|cat=[[List of functions#Entanglement_and_separability|Entanglement&nbsp;and&nbsp;separability]]
|upd=November 26, 2012
+
|upd=November 12, 2014
 
|v=0.50}}
 
|v=0.50}}
<tt>'''OperatorSchmidtDecomposition'''</tt> is a [[List of functions|function]] that computes the [[operator Schmidt decomposition]] of a [[bipartite]] operator. The user may specify how many terms in the operator Schmidt decomposition they wish to be returned.
+
<tt>'''OperatorSchmidtDecomposition'''</tt> is a [[List of functions|function]] that computes the operator Schmidt decomposition of a bipartite operator. The user may specify how many terms in the operator Schmidt decomposition they wish to be returned.
  
 
==Syntax==
 
==Syntax==
Line 67: Line 67:
 
   1.8449e-016
 
   1.8449e-016
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==Known Issues==
 +
If the input matrix <tt>X</tt> is Hermitian, all of the matrices in its operator-Schmidt decomposition can be chosen to be Hermitian. If <tt>X</tt> has distinct operator-Schmidt coefficients then such an operator-Schmidt decomposition is indeed computed, but if there is a repeated coefficient then a non-Hermitian decomposition may (erroneously) be provided instead. See [https://github.com/nathanieljohnston/QETLAB/issues/14 Issue #14 on github].
 +
 +
This should be fixed in a future version of QETLAB. For now, to get around this problem you can add a tiny amount of random (but Hermitian) noise to <tt>X</tt> so that its operator-Schmidt coefficients are distinct.
  
 
{{SourceCode|name=OperatorSchmidtDecomposition}}
 
{{SourceCode|name=OperatorSchmidtDecomposition}}

Latest revision as of 22:38, 28 April 2020

OperatorSchmidtDecomposition
Computes the operator Schmidt decomposition of a bipartite operator

Other toolboxes required none
Related functions FilterNormalForm
IsProductOperator
OperatorSchmidtRank
SchmidtDecomposition
TensorSum
Function category Entanglement and separability

OperatorSchmidtDecomposition is a function that computes the operator Schmidt decomposition of a bipartite operator. The user may specify how many terms in the operator Schmidt decomposition they wish to be returned.

Syntax

  • S = OperatorSchmidtDecomposition(X)
  • S = OperatorSchmidtDecomposition(X,DIM)
  • S = OperatorSchmidtDecomposition(X,DIM,K)
  • [S,U,V] = OperatorSchmidtDecomposition(X,DIM,K)

Argument descriptions

Input arguments

  • X: A bipartite operator to have its operator Schmidt decomposition computed.
  • DIM (optional, by default has both subsystems of equal dimension): A specification of the dimensions of the subsystems that X lives on. DIM can be provided in one of three ways:
    • If DIM is a scalar, it is assumed that the first subsystem has dimension DIM and the second subsystem has dimension length(X)/DIM.
    • If $X \in M_{n_1} \otimes M_{n_2}$ then DIM should be a row vector containing the dimensions (i.e., DIM = [n_1, n_2]).
    • If the subsystems aren't square (i.e., $X \in M_{m_1, n_1} \otimes M_{m_2, n_2}$) then DIM should be a matrix with two rows. The first row of DIM should contain the row dimensions of the subsystems (i.e., the mi's) and its second row should contain the column dimensions (i.e., the ni's). In other words, you should set DIM = [m_1, m_2; n_1, n_2].
  • K (optional, default 0): A flag that determines how many terms in the operator Schmidt decomposition should be computed. If K = 0 then all terms with non-zero operator Schmidt coefficients are computed. If K = -1 then all terms (including zero terms) are computed. If K > 0 then the K terms with largest operator Schmidt coefficients are computed.

Output arguments

  • S: A vector containing the operator Schmidt coefficients of X.
  • U (optional): A cell containing the left Schmidt operators of X.
  • V (optional): A cell containing the right Schmidt operators of X.

Examples

A random example

The following code computes the operator Schmidt decomposition of a random density matrix in $M_2 \otimes M_4$ and verifies that it is indeed a valid tensor decomposition of that density matrix:

>> rho = RandomDensityMatrix(8);
>> [s,U,V] = OperatorSchmidtDecomposition(rho,[2,4])

s =

    0.3986
    0.2310
    0.1637
    0.1118


U = 

    [2x2 double]    [2x2 double]    [2x2 double]    [2x2 double]


V = 

    [4x4 double]    [4x4 double]    [4x4 double]    [4x4 double]

>> norm(s(1)*kron(U{1},V{1}) + s(2)*kron(U{2},V{2}) + s(3)*kron(U{3},V{3}) + s(4)*kron(U{4},V{4}) - rho)

ans =

  1.8449e-016

As an alternative (and easier) way to verify that we have a valid tensor decomposition of rho, we can use the TensorSum function:

>> norm(TensorSum(s,U,V) - rho)

ans =

  1.8449e-016

Known Issues

If the input matrix X is Hermitian, all of the matrices in its operator-Schmidt decomposition can be chosen to be Hermitian. If X has distinct operator-Schmidt coefficients then such an operator-Schmidt decomposition is indeed computed, but if there is a repeated coefficient then a non-Hermitian decomposition may (erroneously) be provided instead. See Issue #14 on github.

This should be fixed in a future version of QETLAB. For now, to get around this problem you can add a tiny amount of random (but Hermitian) noise to X so that its operator-Schmidt coefficients are distinct.

Source code

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